Spring的JDBCTemplate

21 篇文章 0 订阅

当hql等查询方式不能满足性能或灵活性的要求,必须使用SQL时,大家有三种选择:

第一、使用Hibernate 的sql 查询函数,将查询结果对象转为Entity对象。

第二、使用Hibernate Session的getConnection 获得JDBC Connection,然后进行纯JDBC API操作;

第三、选择把Spring的JDBCTemplate作为一种很不错的JDBC Utils来使用。

/*使用jdbcTemplate查询数据的时候可以使用queryForXXX等方法。下面我们就一一解析一下:*/  
1、jdbcTemplate.queryForInt()和jdbcTemplate.queryForLong()  
//使用queryForInt返回user表中的记录数量,queryForInt搭配这样的sql可以在分页的时候计算总记录数  
jdbcTemplate.queryForInt("select count(*) from user");  
  
2、jdbcTemplate.queryForObject()  
//本质上和queryForInt相同,只是可以返回不同的对象,例如返回一个String对象  
String name = (String) jdbcTemplate.queryForObject(  --3个参数,1、sql 2、要传递的参数数组 3、返回来的对象class  
"SELECT name FROM USER WHERE id = ?",    
new Object[] {id},    
java.lang.String.class);  
  
3、jdbcTemplate.queryForList(???)  
//返回一个装有map的list,每一个map是一条记录,map里面的key是字段名  
List rows = jdbcTemplate.queryForList("SELECT * FROM user");  //得到装有map的list  
for(int i=0;i<rows.size();i++){                   //遍历  
Map userMap=rows.get(i);  
System.out.println(userMap.get("id"));    
System.out.println(userMap.get("name"));    
System.out.println(userMap.get("age"));  
}  
  
  
4、jdbcTemplate.queryForMap(SQL)  
//这个查询只能是查询一条记录的查询,返回一个map,key的值是column的值  
Map map = jdbcTemplate.queryForMap("select count(*) as keyval from user");  
map.get("keyval")  
  
  
5、jdbcTemplate.queryForRowSet(???)  
//返回一个RowSet   然后调用.getString或者getInt等去取值  
  
  
  
  
6、jdbc1.query(sql, new RowCallbackHandler()  
//返回一个ResultSet对象, processRow有自动循环的机制,它会自动执行processRow中的语句直到  
//rs的size执行完了为止。我们可以在这其中用list完成对象的转移,只不过list要用final来修饰  
jdbc1.query(sql, new RowCallbackHandler() { //editing  
            public void processRow(ResultSet rs) throws SQLException {  
        VideoSearch vs = new VideoSearch();  
        vs.setRECORDINGFILENAME(rs.getString("RECORDINGFILENAME"));  
        vs.setCALLID(rs.getString("CALLID"));  
        list.add(vs);  
  
    }  
    }  
7.更新操作
//执行sql语句,无返回执,可用于插入等操作
jdbcTemplate.execute(sql);

//更新操作,返回受影响的行数
jdbcTemplate.update(strSql.toString());
//执行批量更新,参数为string数组
jdbcTemplate.batchUpdate(sql);
//更新,args为对象数组
jdbcTemplate.update(strSql, args);

/*
说明:  
JDBCTemplate的使用方法:  
在ApplicationContext.xml中定义一个jdbcTemplate的节点,使用POJO注入,获得注入后可以执行操作  
不需要继承什么基类  
*/  
<bean id="jdbcTemplate"  
class="org.springframework.jdbc.core.JdbcTemplate">              
      <property name="dataSource" ref="dataSource"/>           
</bean>  
  
SqlRowSet rs = jdbcTemplate.queryForRowSet(sql, params);  
/*
jdbcTemplate有很多的ORM化回调操作将返回结果转为对象列表,  
但很多时候还是需要返回ResultSet,Spring有提供一个类似ResultSet的,实现JDBC3.0 RowSet接口的Spring SqlRowSet  
注意  
jdbcTemplate尽量只执行查询操作,莫要进行更新,否则会破坏Hibernate的二级缓存体系 
*/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值