Spring JDBC是Spring所提供的持久层技术。他的目的是降低JDBC API门槛,以一种更直接、更简洁的方式使用JDBC API。spring提供了JdbcTemplate,通过这个类,我们几乎可以完成所有数据库的操作。
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" >
<property name="fetchSize" value="50" />
</bean>
创建JdbcTemplate需要指定一个数据源,用于表示所操作的数据库。除此之外,还有几个用于控制底层数据库的属性,合理配置这些属性,可以提升数据操作的性能:
fetchSize:设置底层的ResultSet每次从数据库抓取的数据行。该属性对应性能影响很大,设置太大会因为一次加载太多的数据到内存中,内存消耗很大,设置太小,则需要多次从数据库读取数据,也会影响性能。
maxRows:表示从底层的ResultSet抓取的最大数据行数。
创建了jdbcTemplate后,我们就可以在dao中注入它,完成各种数据的操作了。
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
query方法及queryForXXX方法:用于执行查询相关语句;
call方法:用于执行存储过程、函数相关语句。
使用示例:
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.query("select * from user",new RowMapper<User>{
public void processRow(ResultSet rs) throws SQLException {
User user=new User();
user.setId(rs.getInt("id"));
}
});
关注微信公众号 javajidi_com,可以实时获取有价值的技术文章推送。
"Java基地"交流群:245130488