查询
Ø queryForObject
//关于 jdbcTemplate的queryForObject方法。下面我们就一一解析一下:
spring 3.2.2 版本之后jdbcTemplate.queryForInt()和jdbcTemplate.queryForLong() 就取消了,全部用queryForObject代替了,这里就不详解了。
Ø queryForObject(sql, requiredType)
本质上和queryForInt相同,只是可以返回不同的对象,例如返回一个String对象
2个参数,1、sql 2、返回来的对象class
String sql ="select count(*) from user";
Integer num =jdbcTemplate.queryForObject(sql, Integer.class);
这里不能直接映射为一个实体类,如
User user = jdbcTemplate.queryForObject(sql,User.class);
运行时会报错。
如果想映射为具体的实体,可以使用ORM框架,或者后面介绍的方法。
Ø queryForObject(sql, requiredType,args...)
第三个参数是个可变参数
String sql = "select count(*) fromuser where ID<? AND ID>?";
jdbcTemplate.queryForObject(sql,Integer.class,4,2 );
Ø queryForObject(sql, args[],requiredType)
第二个参数是个参数数组
jdbcTemplate.queryForObject(sql,newInteger[]{5,1}, Integer.class)
也可以使用不同类型的参数
String sql = "select count(*) fromuser where ID>? AND USER_NAME LIKE ?";
jdbcTemplate.queryForObject(sql, newObject[]{1,"%哈%"},Integer.class);
Ø queryForObject(sql, rowMapper)
注意,这里查询必须保证只能查询一条数据,否则会报错。
String sql = "select * from user WHEREID = 1";
User user = jdbcTemplate.queryForObject(sql,new RowMapper<User>(){
@Override
publicUser mapRow(ResultSet rs, int rowNum) throws SQLException {
Useruser = new User();
user.setId(rs.getInt("ID"));
user.setUserName(rs.getString("USER_NAME"));
returnuser;
}
});
传参也是跟上面相同,两种方法。
Ø queryForList
返回一个装有map的list,每一个map是一条记录,map里面的key是字段名
List<Map<String, Object>> 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"));
}
传参同上。
Ø queryForMap
//这个查询只能是查询一条记录的查询,返回一个map,key的值是column的值
Map<String, Object> map =jdbcTemplate.queryForMap("select * from user");
map.get("name ");
Ø queryForRowSet
//返回一个结果集然后调用.getString或者getInt等去取值
Ø query方法就不详解了,不常用,有queryForXXX方法基本够用。
更新
Ø execute
执行sql语句,无返回执,用于更新操作(增、删、改)
jdbcTemplate.execute(sql);
Ø update
更新操作,返回受影响的行数
Int rowNum = jdbcTemplate.update(sql);
Ø batchUpdate
执行批量更新,参数为string数组
String[] sql = new String[2];
sql[0]= "";
sql[1]= "";
jdbcTemplate.batchUpdate(sql);
//更新,args为对象数组
jdbcTemplate.update(sql, args[]);
/*
说明:
JDBCTemplate的使用方法:
在ApplicationContext.xml中定义一个jdbcTemplate的节点,使用POJO注入,获得注入后可以执行操作
不需要继承什么基类
*/
<beanid="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource"ref="dataSource"/>
</bean>
/*
jdbcTemplate有很多的ORM化回调操作将返回结果转为对象列表,
但很多时候还是需要返回ResultSet,Spring有提供一个类似ResultSet的,实现JDBC3.0RowSet接口的SpringSqlRowSet
注意
jdbcTemplate尽量只执行查询操作,莫要进行更新,否则会破坏Hibernate的二级缓存体系
*/