Spring5-JdbcTemplate

1.概述

  1. Spring框架对JDBC进行封装,使用JdbcTemplate方便对数据库实现操作(增删改查)
  2. 配置bean文件

xml文件,配合德鲁伊连接池:
注意:新驱动器为com.mysql.cj.jdbc.Driver; url需加上时区

<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
      destroy-method="close">
    <property name="url" value="jdbc:mysql:///user_db?serverTimezone=UTC" />
    <property name="username" value="root" />
    <property name="password" value="root" />
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
</bean>

<!--开启组件扫描-->
<context:component-scan base-package="JDBC"></context:component-scan>

<!--JdbcTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <!--注入dataSource,用set方法注入-->
    <property name="dataSource" ref="dataSource"></property>
</bean>
  1. 实现方法:
    创建service类,dao类,在dao中注入jdbcTemplate对象
    在dao实现类中注入jdbcTemplate对象:

注入:

@Autowired
private JdbcTemplate jdbcTemplate;

2.JdbcTempla操作数据库

1.添加

  1. 对应数据库表目创建实体类
  2. 调用jdbcTemplate对象中的update方法实现添加操作:
    update(String sql, Object... args)
  • 参数1: sql语句
  • 参数2: 可变参数, 设置sql语句值(对应添加对象)

eg.

public void add(Book book) {
    //1 创建sql语句
    String sql = "insert into t_book values(?,?,?)";
    //2 调用方法实现
    Object[] args = {book.getUsedId(), book.getUserName(), book.getUstatus()};
    //将args传入下述也可
    int update = jdbcTemplate.update(sql, args);
    System.out.println(update);

}

2.修改

eg.类似于添加:

    String sql = "update t_book set user_id=?,username=? where ustatus=?";
    Object[] args = {book.getUsedId(), book.getUserName(), book.getUstatus()};
    int update = jdbcTemplate.update(sql, args);
    System.out.println(update);

3.删除

eg.类似于添加,基于id删除

public void delete(String id) {
    String sql = "delete from t_book where user_id=?";
    int update = jdbcTemplate.update(sql, id);
    System.out.println(update);
}

4.查询

1).查询返回某个值

eg. 查询表中有多少记录,返回某个值
sql语言: SELECT COUNT(*) FROM t_book 将返回一个数字表示记录数

利用JdbcTemplate实现查询返回某个值代码(queryForObject)
jdbcTemplate.queryForObject(String sql, Class<T> requiredType)

  • 参数1:sql语句
  • 参数2:返回类型的Class (int-Integer.class ...)
  • 返回2的Class类型

eg

public int selectCount() {
    String sql = "select count(*) from t_book";
    Integer count = jdbcTemplate.queryForObject(sql, Integer.class);

    return count;
}

2).查询返回对象

eg. 场景:查询图书的详情页面(一种对象)

利用JdbcTemplate实现查询返回对象(queryForObject)
jdbcTemplate.queryForObject(String sql, RowMapper<T> rowMapper, Object... args)

  • 参数1:sql语句
  • 参数2:RowMapper, 本身为一接口, 针对返回不同类型数据,使用这个接口的实现类可以完成数据封装.
    eg.new BeanPropertyRowMapper<Book>(Book.class)
    Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
  • 参数3:sql语句值
  • 返回2的Class类型

eg.

public Book findBookInfo(String id) {
    String sql = "select * from t_book where user_id=?";
    //调用方法实现
    Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
    return book;
}

3).查询返回集合

eg. 场景:查询图书列表分页(集合)

利用JdbcTemplate实现查询返回对象(queryForObject)
jdbcTemplate.queryForObject(String sql, RowMapper<T> rowMapper, Object... args)

  • 参数1:sql语句
  • 参数2:RowMapper.
    List<Book> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
  • 参数3:sql语句值(无)

eg.

public List<Book> findAllBook() {
    String sql = "selet * from t_book";

    List<Book> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
    return list;
}

3.JdbcTemplate操作数据库(批量操作)

  • 批量操作: 操作表里的多条记录
  • 对上述增删改实现批量操作,运用列表实现操作

1).批量添加

jdbcTemplate.batchUpdate(String sql, List<Object[]> batchArgs

  • 参数1:sql语句
  • 参数2:List集合,添加多条记录数据

eg.源码

public void batchAddBook(List<Object[]> batchArgs) {
    String sql = "insert into t_book values(?,?,?)";
    
    //将list集合进行遍历,将数组值执行sql语句进行添加
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}


实现:

    List<Object[]> batchArgs = new ArrayList<>();
    Object[] o1 = {"100", "Spring", "good"};
    Object[] o2 = {"200", "Maven", "bad"};
    Object[] o3 = {"300", "Mysql", "no"};
    batchArgs.add(o1);
    batchArgs.add(o2);
    batchArgs.add(o3);
    bookService.batchAdd(batchArgs);

2.批量修改

jdbcTemplate.batchUpdate(String sql, List<Object[]> batchArgs

eg.

public void batchUpdateBook(List<Object[]> batchArgs) {
    String sql = "update t_book set userid=?,username=? where ustatus=?";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}

3.批量删除

jdbcTemplate.batchUpdate(String sql, List<Object[]> batchArgs

eg.

public void batchDeleteBook(List<Object[]> batchArgs) {
    String sql = "delete from t_book where userid=?";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}
posted @ 2021-08-20 22:53  rttrti  阅读(50)  评论(0编辑  收藏  举报