zoukankan      html  css  js  c++  java
  • JdbcTemplate学习笔记

    1、使用JdbcTemplate的execute()方法执行SQL语句

    Java代码  收藏代码
    1. jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");  


    2、如果是UPDATE或INSERT,可以用update()方法。

    Java代码  收藏代码
    1. jdbcTemplate.update("INSERT INTO USER VALUES('"  
    2.            + user.getId() + "', '"  
    3.            + user.getName() + "', '"  
    4.            + user.getSex() + "', '"  
    5.            + user.getAge() + "')");  


    3、带参数的更新

    Java代码  收藏代码
    1. jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});  
    Java代码  收藏代码
    1. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});  


    4、使用JdbcTemplate进行查询时,使用queryForXXX()等方法

    Java代码  收藏代码
    1. int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");  


    Java代码  收藏代码
    1. String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class);  


    Java代码  收藏代码
    1. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");  


    Java代码  收藏代码
    1. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");  
    2. Iterator it = rows.iterator();  
    3. while(it.hasNext()) {  
    4.     Map userMap = (Map) it.next();  
    5.     System.out.print(userMap.get("user_id") + " ");  
    6.     System.out.print(userMap.get("name") + " ");  
    7.     System.out.print(userMap.get("sex") + " ");  
    8.     System.out.println(userMap.get("age") + " ");  
    9. }  



       JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。
        除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。

    JDBC的PreparedStatement

    Java代码  收藏代码
    1. final String id = user.getId();  
    2. final String name = user.getName();  
    3. final String sex = user.getSex() + "";  
    4. final int age = user.getAge();  
    5.   
    6. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",  
    7.                      new PreparedStatementSetter() {  
    8.                          public void setValues(PreparedStatement ps) throws SQLException {  
    9.                              ps.setString(1, id);  
    10.                              ps.setString(2, name);            
    11.                              ps.setString(3, sex);  
    12.                              ps.setInt(4, age);  
    13.                          }  
    14.                      });  


    Java代码  收藏代码
    1. final User user = new User();  
    2. jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",  
    3.                     new Object[] {id},  
    4.                     new RowCallbackHandler() {  
    5.                         public void processRow(ResultSet rs) throws SQLException {  
    6.                             user.setId(rs.getString("user_id"));  
    7.                             user.setName(rs.getString("name"));  
    8.                             user.setSex(rs.getString("sex").charAt(0));  
    9.                             user.setAge(rs.getInt("age"));  
    10.                         }  
    11.                     });  




    Java代码  收藏代码
    1. class UserRowMapper implements RowMapper {  
    2.     public Object mapRow(ResultSet rs, int index) throws SQLException {  
    3.         User user = new User();  
    4.   
    5.         user.setId(rs.getString("user_id"));  
    6.         user.setName(rs.getString("name"));  
    7.         user.setSex(rs.getString("sex").charAt(0));  
    8.         user.setAge(rs.getInt("age"));  
    9.   
    10.         return user;  
    11.     }  
    12. }  
    13.   
    14. public List findAllByRowMapperResultReader() {  
    15.     String sql = "SELECT * FROM USER";  
    16.     return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));  
    17. }  



    在getUser(id)里面使用UserRowMapper

    Java代码  收藏代码
    1. public User getUser(final String id) throws DataAccessException {  
    2.     String sql = "SELECT * FROM USER WHERE user_id=?";  
    3.     final Object[] params = new Object[] { id };  
    4.     List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));  
    5.   
    6.     return (User) list.get(0);  
    7. }  



    网上收集
    org.springframework.jdbc.core.PreparedStatementCreator 返回预编译SQL   不能于Object[]一起用

    Java代码  收藏代码
    1. public PreparedStatement createPreparedStatement(Connection con) throws SQLException {  
    2.  return con.prepareStatement(sql);  
    3. }  


    1.增删改
    org.springframework.jdbc.core.JdbcTemplate   类(必须指定数据源dataSource)

    Java代码  收藏代码
    1. template.update("insert into web_person values(?,?,?)",Object[]);  


      或

    Java代码  收藏代码
    1. template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ 匿名内部类 只能访问外部最终局部变量  
    2.   
    3.  public void setValues(PreparedStatement ps) throws SQLException {  
    4.   ps.setInt(index++,3);  
    5. });  


    org.springframework.jdbc.core.PreparedStatementSetter 接口 处理预编译SQL

    Java代码  收藏代码
    1. public void setValues(PreparedStatement ps) throws SQLException {  
    2.  ps.setInt(index++,3);  
    3. }  


    2.查询JdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler)
    org.springframework.jdbc.core.RowMapper   记录映射接口  处理结果集

    Java代码  收藏代码
    1. public Object mapRow(ResultSet rs, int arg1) throws SQLException {   int表当前行数  
    2.   person.setId(rs.getInt("id"));  
    3. }  
    4. List template.query("select * from web_person where id=?",Object[],RowMapper);  


    org.springframework.jdbc.core.RowCallbackHandler  记录回调管理器接口 处理结果集

    Java代码  收藏代码
      1. template.query("select * from web_person where id=?",Object[],new RowCallbackHandler(){  
      2.  public void processRow(ResultSet rs) throws SQLException {  
      3.   person.setId(rs.getInt("id"));  
      4. }); 
  • 相关阅读:
    剑指offer——最小的K个数和数组中第K大的元素
    Leetcode刷题指南链接整理
    160. Intersection of Two Linked Lists
    100. Same Tree
    92. Reverse Linked List II
    94. Binary Tree Inorder Traversal
    79. Word Search
    78,90,Subsets,46,47,Permutations,39,40 DFS 大合集
    0x16 Tire之最大的异或对
    0x16 Tire
  • 原文地址:https://www.cnblogs.com/Struggles/p/4140145.html
Copyright © 2011-2022 走看看