Spring JDBC

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

  步骤

    1、导入 jar 包

        

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

       数据池之数据源创建。

JdbcTemplate template = new JdbcTemplate(ds);

    3、调用 JdbcTemplate 的方法来完成 CRUD 操作

  常用方法:

1、update():执行DML语句。增、删、改语句。
2、queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合,(注意:这个方法查询的结果集长度只能是1)
3、queryForList():查询结果将结果集封装为list集合(注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中)
4、query():查询结果,将结果封装成 JavaBean 对象,
  query的参数:RowMapper
         ① 创建一个匿名内部类 RowMapper,重写里面的方法
         ② 一般使用 BeanPropertyRowMapper 实现类,可以完成数据到 JavaBean 的自动封装
           new BeanPropertyRowMapper<类型>(类型.class)

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

  案例:

      在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 }

    

02-10 01:43