zoukankan      html  css  js  c++  java
  • Java 之 JDBCTemplate

    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 }

        

  • 相关阅读:
    BZOJ 3744 Gty的妹子序列
    BZOJ 3872 Ant colony
    BZOJ 1087 互不侵犯
    BZOJ 1070 修车
    BZOJ 2654 tree
    BZOJ 3243 向量内积
    1003 NOIP 模拟赛Day2 城市建设
    CF865D Buy Low Sell High
    CF444A DZY Loves Physics
    Luogu 4310 绝世好题
  • 原文地址:https://www.cnblogs.com/niujifei/p/11611981.html
Copyright © 2011-2022 走看看