Posted on 2011-10-07 17:22
leekiang 閱讀(859)
評論(0) 編輯 收藏 所屬分類:
jdbc、事務、并發(fā)
ResultSetHandler的實現(xiàn)類有很多種,涉及數(shù)組、map 、javabean等,都接受一個RowProcessor類型的參數(shù)來實現(xiàn)結果集向?qū)ο蟮霓D(zhuǎn)化。其中RowProcessor的默認實現(xiàn)類為BasicRowProcessor, 用戶也可以自己實現(xiàn)RowProcessor。 BasicRowProcessor使用BeanProcessor來完成resultset中的值向javabean的映射,前提要求列名和bean屬性名必須一致。
ArrayHandler :將ResultSet中第一行的數(shù)據(jù)轉(zhuǎn)化成對象數(shù)組
ArrayListHandler : 將ResultSet中所有的數(shù)據(jù)轉(zhuǎn)化成List,List中存放的是Object[]
BeanHandler :將ResultSet中第一行的數(shù)據(jù)轉(zhuǎn)化成類對象
BeanListHandler :將ResultSet中所有的數(shù)據(jù)轉(zhuǎn)化成List,List中存放的是類對象
MapHandler :將ResultSet中第一行的數(shù)據(jù)存成Map映射
MapListHandler :將ResultSet中所有的數(shù)據(jù)存成List。List中存放的是Map
ColumnListHandler :將ResultSet中某一列的數(shù)據(jù)存成List,List中存放的是Object對象
KeyedHandler :將ResultSet中所有數(shù)據(jù)存成Map,Map中key為某一列的值,value為Map,存放key對應的行的數(shù)據(jù)
ScalarHandler :將ResultSet中一條記錄的其中某一列的數(shù)據(jù)存成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方法執(zhí)行后會自己關閉rs和stmt,但沒有關閉連接。
如果傳入dataSource, QueryRunner run = new QueryRunner( dataSource ),則執(zhí)行不含conn參數(shù)的查詢方法時,會自己關閉連接。
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 的優(yōu)化修改DbUtils支持表名下劃線映射dbutilsCommons DbUtils 源碼閱讀四讓你的DBUtils支持enumOSChina底層數(shù)據(jù)庫操作的類(QueryHelper)源碼OSChina底層數(shù)據(jù)庫操作的類(QueryHelper)源碼2基于JDBC+Oracle+Apache Dbutil的泛型DAO日常數(shù)據(jù)庫操作的煩惱及解藥--DbUtils、MyBatis和Hibernate基于dbutils支持annotation的簡易orm