zoukankan      html  css  js  c++  java
  • Java 之 JDBC:(十)Spring的JDBCTemplate

    一、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 }

      

  • 相关阅读:
    Java实现 蓝桥杯 历届试题 城市建设
    Java实现 蓝桥杯 历届试题 城市建设
    Java实现 蓝桥杯 历届试题 城市建设
    Java实现 蓝桥杯 历届试题 城市建设
    MYSQL创建数据库时候直接指定编码和排序规则
    Eclipse 安装插件(aptana、svn 、git、Java EE、JSHint)
    (转)CentOS无损调整磁盘分区大小的实现方法
    Linux(centos)系统各个目录的作用详解
    Ecplise插件安装方法
    Fedora25 将eclipse的快捷方式添加到Applications中
  • 原文地址:https://www.cnblogs.com/niujifei/p/15055492.html
Copyright © 2011-2022 走看看