前言

什么是 JdbcTemplate?
Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作。

本文将对《水浒传》英雄人物表进行数据操作示例,先建一张英雄表:
(no:排名,name:名字,nickname:绰号)

create table hero (no int,name varchar(5),nickname varchar(3)
);
insert into hero values(1,"宋江","及时雨"),(2,"卢俊义","玉麒麟"),(3,"吴用","智多星"),(4,"公孙胜","入云龙");
select * from hero;

这是本文所有代码,如果对您有用,请给小弟点个赞,不胜感激!
(链接:本文项目 提取码:aaaa )


一、准备工作

(1)引入相关 jar 包

(2)配置Spring.xml

包括:数据库连接池、 JdbcTemplate 对象、组件扫描

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!-- 组件扫描 --><context:component-scan base-package="com.chen"></context:component-scan><!-- 数据库连接池 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"><property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf8" /><property name="username" value="root" /><property name="password" value="root" /><property name="driverClassName" value="com.mysql.jdbc.Driver" /></bean><!-- JdbcTemplate 对象 --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><!--注入 dataSource--><property name="dataSource" ref="dataSource"></property></bean></beans>

(3)创建 service 类,创建 dao 类,在 dao 注入 jdbcTemplate 对象

dao接口:

@Service
public interface HeroDao {void add(Hero hero);
}

实现类:

@Repository
public class HeroDaoImpl implements HeroDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;
}

Service:

@Service
public class HeroService {//注入Dao@Autowiredprivate HeroDao heroDao;
}

对应数据库创建实体类;

public class Hero {private int no;private String name;private String nickname;public int getNo() {return no;}public void setNo(int no) {this.no = no;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}
}

二、JdbcTemplate 操作数据库

对数据库进行操作无非就是CRUD(增删改查),下面将依次进行讲解。

(1)增:添加一条数据

编写 service 和 dao
(1)在 dao 进行数据库添加操作
(2)调用 JdbcTemplate 对象里面 update 方法实现添加操作

@Service
public interface HeroDao {void add(Hero hero);
}

jdbcTemplate.update()方法:

有两个参数

  • 第一个参数:sql 语句
  • 第二个参数:可变参数,设置 sql 语句值( sql语句中有3个问号,说明要设置3个值)
@Repository
public class HeroDaoImpl implements HeroDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//增@Overridepublic void add(Hero hero) {//创建sql语句String sql = "insert into hero values(?,?,?)";//调用方法实现Object[] args = {hero.getNo(), hero.getName(), hero.getNickname()};int update = jdbcTemplate.update(sql,args);System.out.println(update);}
}

测试类

@Testpublic void testAdd() {ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");HeroService heroService = context.getBean("heroService",HeroService.class);Hero hero = new Hero();hero.setNo(5);hero.setName("关胜");hero.setNickname("大刀");heroService.addHero(hero);}

输出结果:

12月 29, 2020 12:03:20 下午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
信息: {dataSource-1} inited
1

1表示增加一条数据成功。

刷新数据库,新增数据完成:

(2)删:删除一条数据

根据排名删除1条数据:

HeroDaoImpl实现类:

 //删@Overridepublic void delete(int no) {String sql = "delete from hero where no=?";int update = jdbcTemplate.update(sql, no);System.out.println(update);}

Service:

public void deleteHero(int no) {heroDao.delete(no);}

测试:

@Testpublic void testDelete() {ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");HeroService heroService = context.getBean("heroService",HeroService.class);heroService.deleteHero(1);}

(3)改

//改@Overridepublic void update(Hero hero) {String sql = "update hero set name=?,nickname=? where no=?";Object[] args = {hero.getName(),hero.getNickname(),hero.getNo()};int update = jdbcTemplate.update(sql, args);System.out.println(update);}

(4)查

a、查询返回某个值

1、查询表里面有多少条记录,返回是某个值
2、使用 JdbcTemplate 的 queryForObject() 方法实现查询返回某个值代码

有两个参数

  • 第一个参数:sql 语句
  • 第二个参数:返回类型 Class(是 int 型就写 Interger.class )
//查询有多少条数据@Overridepublic int selectCount() {String sql = "select count(*) from hero";Integer count = jdbcTemplate.queryForObject(sql,Integer.class);return count;}

b、查询返回对象

场景:查询英雄详情
JdbcTemplate 实现查询返回对象

有三个参数

  • 第一个参数:sql 语句
  • 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装
  • 第三个参数:sql 语句值
//查询返回对象@Overridepublic Hero findHeroInfo(int no) {String sql = "select * from hero where no=?";Hero hero = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Hero>(Hero.class), no);return hero;}

测试:

@Testpublic void testFind() {ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");HeroService heroService = context.getBean("heroService",HeroService.class);System.out.println(heroService.FindHero(2));}

输出(记得Hero重写toString方法):

12月 29, 2020 3:23:48 下午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
信息: {dataSource-1} inited
Hero{no=2, name='卢俊义', nickname='天罡星'}

c、查询返回集合

场景:查询英雄列表分页…
调用 JdbcTemplate 方法实现查询返回集合

有三个参数

  • 第一个参数:sql 语句
  • 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装
  • 第三个参数:sql 语句值
//查询返回集合@Overridepublic List<Hero> findAllHero() {String sql = "select * from hero";List<Hero> heroList = jdbcTemplate.query(sql,new BeanPropertyRowMapper<Hero>(Hero.class));return heroList;}

测试:

@Testpublic void testFindAll() {ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");HeroService heroService = context.getBean("heroService",HeroService.class);List<Hero> heroList = heroService.FindallHero();for (Hero hero:heroList) {System.out.println(hero);}}

(5)批量操作:增

批量操作:操作表里面多条记录
JdbcTemplate 实现批量添加操作

有两个参数

  • 第一个参数:sql 语句
  • 第二个参数:List 集合,添加多条记录数据
@Overridepublic void batchAddHero(List<Object[]> batchArgs) {String sql = "insert into hero values(?,?,?)";int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs);System.out.println(Arrays.toString(ints));}

测试:

@Testpublic void testBatchAdd() {//测试批量添加ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");HeroService heroService = context.getBean("heroService",HeroService.class);List<Object[]> batchArgs = new ArrayList<>();Object[] o1 = {"6","林冲","豹子头"};Object[] o2 = {"7","秦明","霹雳火"};Object[] o3 = {"8","呼延灼","双鞭"};batchArgs.add(o1);batchArgs.add(o2);batchArgs.add(o3);heroService.BatchAdd(batchArgs);}

添加成功:

Spring : JdbcTemplate操作数据库(详细)相关推荐

  1. 编写DAO,通过JdbcTemplate操作数据库的实践

    目的:编写DAO,通过Spring中的JdbcTemplate,对数据库中的学生数据进行增删改查操作. 要操作的数据库表结构为: 一.大体框架 1.要利用JdbcTemplate,首先要添加Sprin ...

  2. JdbcTemplate操作数据库demo

    1.JdbcTemplate操作数据库 1.什么是 JdbcTemplate (1)Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作 2.准备工作 (1) ...

  3. Spring5框架基础详解(五)(JdbcTemplate概念和准备、jdbcTemplate操作数据库添加功能、修改和删除功能、查询功能)

    文章目录 一.JdbcTemplate是什么和准备工作 1.1.引入相关maven依赖 1.2在spring配置文件配置数据库连接 1.3配置JdbcTemplate对象,注入DateSource 1 ...

  4. JavaWeb——Spring 的操作数据库的 DAO模式

    JavaWeb--Spring 系列 四.Spring AOP的 DAO 1.DAO 介绍 DAO,Data Access Object,顾名思义适用于操作数据库的.Spring 的 DAO 是 O/ ...

  5. Spring Boot操作数据库学习之整合JDBC

    文章目录 一 Spring Data简介 二 Spring Boot集成JDBC 2.1 项目创建步骤 2.2 测试的SQL脚本 2.3 编写yaml配置文件连接数据库 2.4 IDEA连接数据库步骤 ...

  6. spring-使用配置文件完成JdbcTemplate操作数据库-c3p0

    一.创建spring项目     项目名称:spring101302 二.在项目上添加jar包     1.在项目中创建lib目录         /lib     2.在lib目录下添加spring ...

  7. spring-使用配置文件完成JdbcTemplate操作数据库

    一.创建spring项目     项目名称:spring101302 二.在项目上添加jar包     1.在项目中创建lib目录         /lib     2.在lib目录下添加spring ...

  8. php pdo操作mysql_PHP操作数据库详细(PDO)

    PHP 5.1 发布时将附带一个全新的数据库连接层,即 PHP Data Objects (PDO).虽然 PHP 一直都拥有很好的数据库连接,但 PDO 让 PHP的数据库操作 达到一个新的高度.P ...

  9. Spring Boot中使用JdbcTemplate访问数据库

    本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例. 数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. ...

最新文章

  1. 在Python中对子进程进行非阻塞读取
  2. Coursera在线学习---第十节.大规模机器学习(Large Scale Machine Learning)
  3. 自动化测试之alert弹窗的切换
  4. JDK踩坑: Smart LocalDate
  5. C# Dev控件中的 GridControl 双击行事件
  6. Google Analytics Advanced Configuration - Google Analytics 高级配置
  7. Tip of the day的bug
  8. PDE13 Wave equation: separation of variables
  9. JAVA获取sjis文件乱码_下载文件时,文件名乱码。 | 学步园
  10. kali linux捉肉鸡教程,使用Kali中的Metasploit生成木马控制Windows系统
  11. js延时函数--setTimeout
  12. Mac操作系统输入法快捷键设置
  13. 天下会 - 搜索经验之网络搜索技巧总结
  14. C语言会员卡计费系统
  15. 易捷web文件服务器软件,易捷在线文件管理系统
  16. MutationObserver监测qrcodejs2二维码生成失败
  17. 瑜伽美体塑形馆小程序课程报名系统开发制作
  18. 砸金蛋java代码_java实现砸金蛋抽奖功能
  19. Ghost全盘镜像备份/还原(上)
  20. Java 敏感词过滤(DFA有穷自动机)

热门文章

  1. 【单片机毕业设计】【mcuclub-jj-022】基于单片机的鱼缸的设计
  2. Linux 搭建Owncloud 私有云
  3. 非精确一维线搜索(Armijo-Goldstein Rule 和 Wolfe-Powell Rule)
  4. 单机魔兽世界服务器显示不兼容,官网公告:解决登陆游戏设备驱动不兼容问题...
  5. 从0开始学Unity做SLG系列(GameFramework框架)
  6. 关于Spire.PDF for .NET
  7. IEEE论文格式要求
  8. OpenCV4.x图像处理实例-疲劳检测(基于眼睛纵横比,Eye Aspect Radio,EAR)
  9. Manifest merger failed with multiple errors, see logs问题解决
  10. 网易云音乐评论内容逆向分析