JdbcTemplate介绍

  • JdbcTemplate概念
  • 使用JdbcTemplate的准备工作
  • 操作数据库(增)
  • 操作数据库 (修改和删除)
  • 操作数据库 (查询)
    • 查询返回某个值
    • 查询返回对象
    • 查询返回集合
  • 操作数据库 (批量添加)
  • 操作数据库 (批量修改和删除)

Spring配置JdbcTemplate
1、配置数据库连接池

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close"><property name="url" value="jdbc:mysql:///user_db" /><property name="username" value="root" /><property name="password" value="123456" /><property name="driverClassName" value="com.mysql.jdbc.Driver" /></bean>

2、配置 JdbcTemplate 对象,注入 DataSource

<bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean>

3、开启注解扫描

<context:component-scan base-package="com.study.spring5"></context:component-scan>

4、service注入dao,dao注入JdbcTemplate

@Servicepublic class BookService {//注入dao@Autowiredprivate BookDao bookDao;}
@Repositorypublic class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;}

操作数据库

//创建sql语句String sql = "insert into t_book values(?,?,?)";Object[] args = {book.getUserid(), book.getUsername(), book.getUstatus()};int rows = jdbcTemplate.update(sql, args);

String sql = "delete from t_book where userid = ?";int rows = jdbcTemplate.update(sql, userid);

String sql = "update t_book set username = ?,ustatus = ? where userid = ?";Object[] args = {book.getUsername(), book.getUstatus(), book.getUserid()};int rows = jdbcTemplate.update(sql, args);


查询结果:单个记录

queryForObject(String sql,Class)

  • 第一个参数:sql 语句
  • 第二个参数:返回类型 Class
String sql = "select count(*) from t_book";Integer count = jdbcTemplate.queryForObject(sql, Integer.class);


查询结果:对象

queryForObject (String sql, RowMapperrowMapper, rowMapper)

  • 第一个参数:sql 语句
  • 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装
  • 第三个参数:sql 语句值
String sql = "select * from t_book where userid = ?";Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);


查询结果:集合

String sql = "select * from t_book";List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));

JdbcTemplate概念

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

使用JdbcTemplate的准备工作

(1)引入相关 jar 包

(2)在 spring 配置文件配置数据库连接池

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close"><property name="url" value="jdbc:mysql:///user_db" /><property name="username" value="root" /><property name="password" value="123456" /><property name="driverClassName" value="com.mysql.jdbc.Driver" /></bean>

(3)配置 JdbcTemplate 对象,注入 DataSource

<bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean>

(4)开启注解扫描

<context:component-scan base-package="com.study.spring5"></context:component-scan>

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

BookDaoImpl

@Repositorypublic class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;}

BookService

@Servicepublic class BookService {//注入dao@Autowiredprivate BookDao bookDao;}

操作数据库(增)

1、对应数据库创建实体类

提供对应的 get 和 set 方法

2、编写 service 和 dao
BookService

@Servicepublic class UserService {//注入dao@Autowiredprivate BookDao bookDao;//添加方法public void add(Book book) {bookDao.add(book);}}

BookDaolmpl

@Repositorypublic class BookDaoImpl implements BookDao {//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//添加的方法,在接口中规范方法,由实现类来完成具体功能@Overridepublic void add(Book book) {//创建sql语句String sql = "insert into t_book values(?,?,?)";//调用方法实现Object[] args = {book.getUserid(), book.getUsername(), book.getUstatus()};int rows = jdbcTemplate.update(sql, args);System.out.println(rows);}}

3 测试

@Testpublic void testJdbcTemplate() {ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");UserService userService = context.getBean("userService", UserService.class);Book book = new Book();book.setUserid(100);book.setUsername("Java");book.setUstatus("perfect");userService.add(book);}

操作数据库 (修改和删除)

修改

@Overridepublic void update(Book book) {String sql = "update t_book set username = " />;Object[] args = {book.getUsername(), book.getUstatus(), book.getUserid()};int rows = jdbcTemplate.update(sql, args);System.out.println("更新受影响的行数: " + rows);}

删除

@Overridepublic void delete(Integer userid) {String sql = "delete from t_book where userid = ?";int rows = jdbcTemplate.update(sql, userid);System.out.println("删除受影响的行数: " + rows);}

操作数据库 (查询)

查询返回某个值

UserService

//查询表中记录数public int findCount() {return bookDao.selectCount();}

queryForObject(String sql,Class)
第一个参数:sql 语句

第二个参数:返回类型 Class

//查询表中记录数@Overridepublic int selectCount() {String sql = "select count(*) from t_book";Integer count = jdbcTemplate.queryForObject(sql, Integer.class);return count;}

测试

int count = userService.findCount();System.out.println("查询表中记录数: " + count);

查询返回对象


1、第一个参数:sql 语句
2、第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装
3、第三个参数:sql 语句值

@Overridepublic Book findBookInfo(Integer id) {String sql = "select * from t_book where userid = " />;Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);return book;}

查询返回集合

@Overridepublic List<Book> findAllBook() {String sql = "select * from t_book";List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));return bookList;}

操作数据库 (批量添加)

//批量添加@Overridepublic void batchAddBook(List<Object[]> batchArgs) {//创建sql语句String sql = "insert into t_book values(?,?,?)";int[] rows = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println("受影响的行数: " + Arrays.toString(rows));}

测试

//批量添加List<Object[]> list = new ArrayList<>();Object[] o1 = {"3", "tjava","a"};Object[] o2 = {"4","c++","b"};Object[] o3 = {"5","MySQL","c"};list.add(o1);list.add(o2);list.add(o3);userService.batchAdd(list);

操作数据库 (批量修改和删除)

修改

@Overridepublic void batchUpdateBook(List<Object[]> batchArgs) {//创建sqlString sql = "update t_book set username = ?,ustatus = ? where userid = ?";int[] rows = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println("受影响的行数: " + Arrays.toString(rows));}

测试

List<Object[]> list = new ArrayList<>();//数组的顺序要和 sql 的 中的 ? 匹配Object[] o1 = {"java0000","a6","3"};Object[] o2 = {"c++1111","b7","4"};Object[] o3 = {"MySQL0101","c8","5"};list.add(o1);list.add(o2);list.add(o3);userService.batchUpdate(list);


删除

@Overridepublic void batchDeleteBook(List<Object[]> batchArgs) {String sql = "delete from t_book where userid = ?";int[] rows = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println("受影响的行数: " + Arrays.toString(rows));}

测试

List<Object[]> list = new ArrayList<>();Object[] o1 = {"3"};Object[] o2 = {"4"};Object[] o3 = {"5"};list.add(o1);list.add(o2);list.add(o3);userService.batchDelete(list);