1. 程式人生 > >轉載DBUtils--優化dao層操作

轉載DBUtils--優化dao層操作

一:Dbutils是什麼?(當我們很難理解一個東西的官方解釋的時候,就讓我們記住它的作用)     Dbutils:主要是封裝了JDBC的程式碼,簡化dao層的操作。     作用:幫助java程式設計師,開發Dao層程式碼的簡單框架。          框架的作用:幫助程式設計師,提高程式的開發效率。     出生:Dbutils是由Apache公司提供。二:為什麼需要Dbutils ?     在使用Dbutils 之前,我們Dao層使用的技術是JDBC,那麼分析一下JDBC的弊端:          (1)資料庫連結物件、sql語句操作物件,封裝結果集物件,這三大物件會重複定義          (2)封裝資料的程式碼重複,而且操作複雜,程式碼量大          (3)釋放資源的程式碼重複               結果:(1)程式設計師在開發的時候,有大量的重複勞動。(2)開發的週期長,效率低三:Dbutils三個核心類介紹:     1:DbUtils:連線資料庫物件----jdbc輔助方法的集合類,執行緒安全          構造方法:DbUtils()          作用:控制連線,控制書屋,控制驅動載入額一個類。     2:
QueryRunner:SQL語句的操作物件,可以設定查詢結果集的封裝策略,執行緒安全。          構造方法:          (1)QueryRunner():建立一個與資料庫無關的QueryRunner物件,後期再操作資料庫的會後,需要手動給一個Connection物件,它可以手動控制事務。                    Connection.setAutoCommit(false);     設定手動管理事務                    Connection.commit();     提交事務          (2)QueryRunner(DataSource ds):建立一個與資料庫關聯的queryRunner物件,後期再操作資料庫的時候,不需要Connection物件,自動管理事務。                    DataSource:資料庫連線池物件。          建構函式與增刪改查方法的組合:
     QueryRunner()           update(Connection conn, String sql, Object... params)           query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)     QueryRunner(DataSource ds)                update(String sql, Object... params)           query(String sql, ResultSetHandler<T> rsh, Object... params)
(3)ResultSetHandle:封裝資料的策略物件------將封裝結果集中的資料,轉換到另一個物件          策略:封裝資料到物件的方式(示例:將資料庫儲存在User、儲存到陣列、儲存到集合)     方法介紹:handle(ResultSet rs)          備註:詳解參考ResultSetHandle實現類四:Dbutils快速入門     使用Dbutils注意事項:          (1)需要匯入的jar包:①MySql驅動     ②c3p0包     ③DbUtils包          (2)新增c3p0配置檔案          (3)可以自行新增一個JDBCUtils工具類:用來獲取c3p0連線池物件

現在的增刪改查,就用dbuitls進行優化

* MapListHanlder:將結果集轉為一個map的list
* map:對一個查詢的一條記錄;鍵,是列的屬性名,值,是鍵所對應屬性名的值; 鍵不是列的別名
* 而MapListBanlder:返回多條記錄的對應的map的集合
* */
public void testMapListHandler() throws Exception{
Connection connection=null;
QueryRunner queryRunner=new QueryRunner();
try {
//獲取資料庫連線池的方法
connection=t.testBasicDataSource();

String sql="select id,name,email,birth from customer";
//new MapHandler()此方法輸出一個結果的鍵值對;
List<Map<String, Object>> result=
queryRunner.query(connection, sql,new MapListHandler());	
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}finally {
close(connection, null, null);
}
}

======================================================
/*
* MapHanlder:返回sql對應的第一條記錄對應的map物件
* 輸出的是鍵值對:鍵,是列的屬性名,值,是鍵所對應屬性名的值;
* 鍵不是列的別名,
* */
public void testMapHandler() throws Exception{
Connection connection=null;
QueryRunner queryRunner=new QueryRunner();
try {
//獲取資料庫連線池的方法
connection=t.testBasicDataSource();

String sql="select id,name,email,birth from customer";
//new MapHandler()此方法輸出一個結果的鍵值對;
Map<String, Object> map=
queryRunner.query(connection, sql,new MapHandler());	
System.out.println(map);
} catch (Exception e) {
e.printStackTrace();
}finally {
close(connection, null, null);
}
}

  QueryRunner  ResultsetHandler

 ArrayHandler:     將查詢結果的第一行資料,儲存到Object陣列中      ②ArrayListHandler     將查詢的結果,每一行先封裝到Object陣列中,然後將資料存入List集合      ③BeanHandler     將查詢結果的第一行資料,封裝到user物件     ④BeanListHandler     將查詢結果的每一行封裝到user物件,然後再存入List集合     ⑤ColumnListHandler     將查詢結果的指定列的資料封裝到List集合中     ⑥MapHandler     將查詢結果的第一行資料封裝到map結合(key==列名,value==列值)     ⑦MapListHandler     將查詢結果的每一行封裝到map集合(key==列名,value==列值),再將map集合存入List集合     ⑧BeanMapHandler     將查詢結果的每一行資料,封裝到User物件,再存入mao集合中(key==列名,value==列值)     ⑨KeyedHandler     將查詢的結果的每一行資料,封裝到map1(key==列名,value==列值 ),然後將map1集合(有多個)存入map2集合(只有一個)     ⑩ScalarHandler     封裝類似count、avg、max、min、sum......函式的執行結果