轉載DBUtils--優化dao層操作
阿新 • • 發佈:2019-01-24
一: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......函式的執行結果