jdbcTemplate
1,jdbcTemplate针对数据查询提供了多个重载的模板方法:
Int queryForInt(String sql)
Int queryForInt(String sql,Object[] args)
Long queryForLong(String sql)
Long queryForLong(String sql,Object[] args)
Object queryForObject(String sql,class queriedType)
Object queryForObject(String sql,Object[] args,class queriedType)
Map queryForMap(String sql)
Map queryForMap(String sql,Object[] args)
List queryForList(String sql)
List queryForList(String sql,Object[] args)
例子:
Int count = jdbcTemplate.queryForInt(“select age from user where userId=?”,new Object[]{new Integer(100)})
queryForMap与其它方法的区别在于,它的查询结果是以java.util.Map的形式返回,map中的key值就是所查表的列名,value值就是key所对应的列的值。
queryForList 它的查询结果是以java.util.list的形式返回,其中每一个元素都是java.util.map类型,分别对应结果集中的一行。
2,用于查询的回调有3种:
1)org.springframework.jdbc.core.ResultSetExtractor,相对拥有更多的控制权,使用它需要自行处理ResultSet,处理完后可以将结果以任何形式包装后返回。它的返回结果是Object类型的。需要我们声明一个list,循环遍历结果集,并组装数据。
//org.springframework.jdbc.core.ResultSetExtractor
List userList = (List)jdbcTemplate.query(String sql ,new ResultSetExtractor(){
public Object extractData(Result rs)throws SQLException,DataAccessException{
List users = new ArrayList();
while(rs.next()){
User user = new User();
user.setUserName(rs.getString(1));
…
users.add(user);
}
return users;
}
});
2)org.springframework.jdbc.core.RowCallBackHandler,仅仅关注单行结果的处理,它的返回值为空。可以在程序中声明一个集合容器,来存储处理后的结果。
3)
//org.springframework.jdbc.core.RowCallBackHandler
final List users = new ArrayList();
jdbcTemplate.query(String sql, new RowCallBackHandler(){
public void processRow(Result rs) throws SQLException{
User user = new User();
user.setUserName(rs.getString(“userName”));
…
users.add(user);
}
});
4)org.springframework.jdbc.core.RowMapper ResultSetExtractor的精简版,类似于RowCallBackHandler,也只关注处理单行的结果,不过,处理后的结果将由ResultSetExtractor的实现类进行组合,
//org.springramework.jdbc.core.RowMaper.
List userList = jdbcTemplate.query(String sql, new RowMapper(){
public Object mapRow(Result rs , int rowNumber) throws SQLException{
User user = new User();
user.setUserName(rs.getString(1));
…
return user;
}
});
2,要是用jdbcTemplate对象来操作数据库,通常情况下有3种方式得到jdbcTemplate对象
1)我们可以在自定义的dao中注入DataSource,自己来实例化jdbcTemplate。
2)在spring容器中配置一个jdbcTemplate,将DataSource注入进来,然后注入到dao中。
3)Spring提供了org.springframework.jdbc.core.support.jdbcDaoSupport类,这个类中定义了jdbcTemplate属性,也定义了DataSource属性,当设置DataSource时,会实例化jdbcTemplate,所以在编写dao时只要继承JdbcDaoSupport,然后注入DataSource即可,