Posted on 2011-10-07 17:22
leekiang 阅读(851)
评论(0) 编辑 收藏 所属分类:
jdbc、事务、并发
ResultSetHandler的实现类有很多种,涉及数组、map 、javabean等,都接受一个RowProcessor类型的参数来实现结果集向对象的转化。其中RowProcessor的默认实现类为BasicRowProcessor, 用户也可以自己实现RowProcessor。 BasicRowProcessor使用BeanProcessor来完成resultset中的值向javabean的映射,前提要求列名和bean属性名必须一致。
ArrayHandler :将ResultSet中第一行的数据转化成对象数组
ArrayListHandler : 将ResultSet中所有的数据转化成List,List中存放的是Object[]
BeanHandler :将ResultSet中第一行的数据转化成类对象
BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
MapHandler :将ResultSet中第一行的数据存成Map映射
MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象
KeyedHandler :将ResultSet中所有数据存成Map,Map中key为某一列的值,value为Map,存放key对应的行的数据
ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
查询的基本用法:
String url = "jdbc:mysql://localhost:3306/blog";
String jdbcDriver = "com.mysql.jdbc.Driver";
String user = "root";
String password = "root";
DbUtils.loadDriver(jdbcDriver);
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
QueryRunner qr = new QueryRunner();
List results = (List)qr.query(conn, "select * from T_USER", new BeanListHandler(User.class) );
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);
}
该query方法执行后会自己关闭rs和stmt,但没有关闭连接。
如果传入dataSource, QueryRunner run = new QueryRunner( dataSource ),则执行不含conn参数的查询方法时,会自己关闭连接。
public <T> T query(String sql, ResultSetHandler<T> rsh, Object params)
throws SQLException {
Connection conn = this.prepareConnection();
try {
return this.query(conn, sql, rsh, params);
} finally {
close(conn);
}
} 扩展ApacheCommos的DbUtils以支持字段名下划线映射对 DBUtils 包中 BeanProcessor 的优化修改DbUtils支持表名下划线映射dbutilsCommons DbUtils 源码阅读四让你的DBUtils支持enumOSChina底层数据库操作的类(QueryHelper)源码OSChina底层数据库操作的类(QueryHelper)源码2基于JDBC+Oracle+Apache Dbutil的泛型DAO日常数据库操作的烦恼及解药--DbUtils、MyBatis和Hibernate基于dbutils支持annotation的简易orm