Spring MVC那些事之JdbcTemplate的使用总结

来源:互联网 发布:网络运营总监简历 编辑:程序博客网 时间:2024/05/22 15:53
       jdbctemplate主要使用的方法:
      1.execute方法:用于执行任何SQL语句,一般用于执行DDL语句,例如:

     jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100)) "); 


      2.update及batchupdate方法:update用于执行新增,修改和删除等语句,batchupdate用于批量处理相关语句,例如:
      jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object [] {name, id});

     使用KeyHolder keyholder=new GeneratedKeyHolder();  jdbcTemplate.update(sql, ps,keyholder);这个参数可以获得主键生成值 。


     3.query及queryForXXXX方法:用于执行查询语句
       在使用query语句进行查询时,有几种回调方式,其中用的最多的是结果集处理回调,通过回调处理Resultset或将  ResultSet转换为需要的形式:
       RowMapper:用于将结果集每行数据转换为需要的类型,用户需实现方法mapRow(ResultSet rs, int rowNum)来完成将每行数据转换为相应的类型。例如:
      jdbcTemplate.query(listSql, new RowMapper<Map>() {  
           @Override  
            public Map mapRow(ResultSet rs, int rowNum) throws SQLException {  
                 Map row = new HashMap();  
                row.put(rs.getInt("id"), rs.getString("name"));  
                return row;  

         }});  


        RowCallbackHandler:用于处理ResultSet的每一行结果,用户需实现方法processRow(ResultSet rs)来完成处理, 在该回调方法中无需执行rs.next(),该操作由JdbcTemplate来执行,用户只需按行获取数据然后处理即可,例如:
         jdbcTemplate.query(listSql, new RowCallbackHandler() {  
            @Override  
           public void processRow(ResultSet rs) throws SQLException {  
               Map row = new HashMap();  
              row.put(rs.getInt("id"), rs.getString("name"));  
              result.add(row);  

        }});  


       ResultSetExtractor:用于结果集数据提取,用户需实现方法extractData(ResultSet rs)来处理结果集,用户必须处理整个结果集;
       jdbcTemplate.query(listSql, new ResultSetExtractor<List>() {  
            @Override  
            public List extractData(ResultSet rs)   throws SQLException, DataAccessException {  
                List result = new ArrayList();  
               while(rs.next()) {  
                    Map row = new HashMap();  
                   row.put(rs.getInt("id"), rs.getString("name"));  
                  result.add(row);  
                }  
               return result;  

       }});  


          另一种处理方式例如:jdbcTemplate.query(sql,new BeanPropertyRowMapper(User.class));


         queryForXXXX用于直接返回相应的结果,例如queryForObject(sql,Integer.class).但是queryForObject会返回函数会抛出2种异常EmptyResultDataAccessException和IncorrectResultSizeDataAccessException.这2种异常分别对应了结果集大于1和小于1的情况,因此需要对于queryForObject做异常判断!对于queryForInt之类的方法已经不推荐使用,可以使用queryForObject方法来替代。queryForList返回0行是不会有异常的,queryForInt, queryForMap, queryForObject会抛。


         4.call方法:用于执行存储过程,函数相关语句。由于现阶段接触的比较少,就不做相应的介绍。

        NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,可以使用DataSource或JdbcTemplate 对象作为构造器参数初始化,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干,NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。 在jdbctemplate中的sql语句中参数一般用?占位符,而在NamedParameterJdbcTemplate使用(:参数名)表示需要传递的参数,通过一个Map或SqlParameterSource 的方式将参数传递给NamedParameterJdbcTemplate.用map的所有参数的值都必须要放到map中去,其中的key为:后面的名称,value是你传的值 SqlParameterSource的好处是不用一个个的赋值,但是:x中的x的值必须和对象的属性名称一样 
0 0
原创粉丝点击