首页 > 技术文章 > Java 之 JDBC:(十)Spring的JDBCTemplate

niujifei 2021-07-24 16:17 原文

一、Spring JDBC

  Spring 框架是对 JDBC 的简单封装,提供了一个 JDBCTemplate 对象简化 JDBC 的开发。

  使用步骤:

    1. 导入 jar包

      

    2. 创建 JDBCTemplate 对象,依赖于数据源 DataSource

      数据池之数据源创建

JdbcTemplate template = new JdbcTemplate(ds);

 

    3. 调用 JDBCTemplate 的方法来完成 CRUD 操作

update():执行DML语句。增、删、改语句。

queryForMap():
查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合,(注意:这个方法查询的结果集长度只能是1)

queryForList():
查询结果将结果集封装为list集合(注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中)

queryForObject():查询结果,将结果封装成对象,一般用于聚合函数的查询

query():查询结果,将结果封装成 JavaBean 对象
query的参数:RowMapper
        ① 创建一个匿名内部类 RowMapper,重写里面的方法
        ② 一般使用 BeanPropertyRowMapper 实现类,可以完成数据到 JavaBean 的自动封装:new BeanPropertyRowMapper<类型>(类型.class)

 

二、案例

  在bookstores 数据库中有一个book表,表结构和记录如下:

  

  需求  

    (1)修改1号数据的 num 为10;

    (2)添加一条记录;

    (3)删除刚刚添加的记录;

    (4)查询 id 为1的记录,将其封装为 Map 集合;

    (5)查询所有记录,将其封装为 List;

    (6)查询所有记录,将其封装为 Emp对象的 List 集合;

    (7)查询总记录数。

  代码实现

  1 import cn.ks.beans.Book;
  2 import cn.ks.utils.JDBCUtils;
  3 import org.junit.Test;
  4 import org.springframework.jdbc.core.BeanPropertyRowMapper;
  5 import org.springframework.jdbc.core.JdbcTemplate;
  6 import org.springframework.jdbc.core.RowMapper;
  7 
  8 import java.sql.ResultSet;
  9 import java.sql.SQLException;
 10 import java.util.List;
 11 import java.util.Map;
 12 
 13 public class JdbcTemplateDemo {
 14 
 15     //1获取JDBCTemplate 对象
 16     private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
 17 
 18     /*
 19      * 1、修改1号数据的 num 为10;
 20      */
 21     @Test
 22     public void test1() {
 23 
 24         // 2 定义SQL
 25         String sql = "update book set num=10 where id=1";
 26         // 3 执行SQL
 27         int count = template.update(sql);
 28 
 29         System.out.println(count);
 30 
 31     }
 32 
 33     /*
 34      * 2 添加一条记录;
 35      */
 36     @Test
 37     public void test2() {
 38         String sql = "insert into book values(?,?,?,?,?)";
 39         int count = template.update(sql, null, "红楼梦", 3, 33.0, 6);
 40         System.out.println(count);
 41     }
 42 
 43     /*
 44      * 3、删除刚刚添加的记录;
 45      */
 46     @Test
 47     public void test3() {
 48         String sql = "delete from book where id=?";
 49         int count = template.update(sql, 3);
 50         System.out.println(count);
 51     }
 52 
 53     /*
 54      * 4、查询 id 为1的记录,将其封装为 Map 集合;
 55      * 注意,这个方法查询的结果长度只能是1
 56      */
 57     @Test
 58     public void test4() {
 59 //       String sql = "select * from book where id=? or id=?";
 60 //       Map<String, Object> map = template.queryForMap(sql, 1, 2);
 61         String sql = "select * from book where id=?";
 62         Map<String, Object> map = template.queryForMap(sql, 1);
 63         System.out.println(map);
 64         //{id=1, name=西游记, kind=1, price=22.0, num=5}
 65     }
 66 
 67     /*
 68       5、查询所有记录,将其封装为 List;
 69      */
 70     @Test
 71     public void test5() {
 72         String sql = "select * from book";
 73         List<Map<String, Object>> list = template.queryForList(sql);
 74 
 75         for (Map<String,Object> item : list) {
 76             System.out.println(item);
 77         }
 78     }
 79 
 80     /*
 81        6、查询所有记录,将其封装为 Emp对象的 List 集合;
 82      */
 83     @Test
 84     public void test6() {
 85         String sql = "select * from book";
 86         List<Book> list = template.query(sql, new RowMapper<Book>() { //匿名内部类
 87             @Override
 88             public Book mapRow(ResultSet resultSet, int i) throws SQLException {
 89                 Book book = new Book();
 90                 book.setId(resultSet.getInt("id"));
 91                 book.setName(resultSet.getString("name"));
 92                 book.setKind(resultSet.getString("kind"));
 93                 book.setPrice(resultSet.getDouble("price"));
 94                 book.setNum(resultSet.getInt("num"));
 95 
 96                 return book;
 97             }
 98         });
 99 
100         for (Book book : list) {
101             System.out.println(book);
102         }
103     }
104 
105     /*
106         6、查询所有记录,将其封装为 Emp对象的 List 集合;
107      */
108     @Test
109     public void test7() {
110         String sql = "select * from book";
111         List<Book> list = template.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
112         for (Book book : list) {
113             System.out.println(book);
114         }
115     }
116 
117     /*
118      * 7、查询总记录数。
119      */
120     @Test
121     public void test8() {
122         String sql = "select count(id) from book";
123         Long aLong = template.queryForObject(sql, Long.class);
124         System.out.println(aLong);
125     }
126 }

 

  

 

推荐阅读