【Spring】Spring框架JdbcTemplate类中查询方法介绍
Spring框架中org.springframework.jdbc.core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,其他模板类都是基于它封装完成的。
Spring除了提供JdbcTemplate核心类外,还提供了基于JdbcTemplate实现的NamedParameterJdbcTemplate类用于支持命名参数绑定、 SimpleJdbcTemplate类用于支持JDK5+的可变参数及自动装箱拆箱等特性。本文主要介绍JdbcTemplate核心类。
JdbcTemplate类主要提供以下四类方法:
- execute方法:用于执行任何SQL语句,一般用于执行DDL语句;
- update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句,batchUpdate方法用于执行批处理相关语句;
- query方法及queryForXXX方法:用于执行查询相关语句;
- call方法:用于执行存储过程、函数相关语句。
下面将主要介绍query方法及queryForXXX方法的返回值和相关异常。其中Object[] args就是设置参数用的,而int[] argTypes则是指定参数类型,参数类型定义在java.sql.Types类中。
1、 查询结果为一列的处理
2、 查询结果为多列的处理
其中下面这些查询方法支持多列结果集:
List query(String sql, RowMapper rowMapper)
Map queryForMap(String sql)
Object queryForObject(String sql, RowMapperrowMapper)
List queryForList(String sql)
其他不支持多列结果集的查询方法则会抛出IncorrectResultSetColumnCountException异常。
3、RowMapper接口
这个接口的实现类的功能是将结果集中的每一行数据封装成用户定义的结构,所以在查询方法中经常会被用到。Spring框架为我们提供了BeanPropertyRowMapper/ParameterizedBeanPropertyRowMapper,ColumnMapRowMapper和SingleColumnRowMapper这三大便利类。
3.1 BeanPropertyRowMapper类与ParameterizedBeanPropertyRowMapper类
BeanPropertyRowMapper类与ParameterizedBeanPropertyRowMapper类的功能完全相同,当POJO对象和数据库表字段完全对应或者驼峰式与下划线式对应时,该类会根据构造函数中传递的class来自动填充数据。只是ParameterizedBeanPropertyRowMapper类使用泛型需要JDK5+支持。这里需要注意虽然这两个类提供了便利,但是由于使用反射导致性能下降,所以如果需要高性能则还是需要自己去实现RowMapper接口来包装数据。
3.2 ColumnMapRowMapper类
ColumnMapRowMapper类返回一个List对象,对象中的每一个元素都是一个以列名为key的Map对象。
3.2 SingleColumnRowMapper类
SingleColumnRowMapper类也返回一个List对象,对象中的每个元素是数据库中的某列的值。注意结果集必须是单列,不然会抛出IncorrectResultSetColumnCountException异常。
转自: http://blog.****.net/zbw18297786698/article/details/53223910