天天看點

Apache Commons DbUtils使用手冊

Apache Commons DbUtils使用手冊

一、介紹

DBUtils是個小巧的JDBC輕量級封裝的工具包,其最核心的特性是在JDBC的基礎上做了一層封裝,主要是對結果集的封裝,可以直接将查詢出來的結果集封裝成JavaBean,旨在簡化JDBC代碼混亂與重複。

JDBC代碼開發,存在很多難點:

1)操作過程複雜,代碼操作一個模式,大量的重複。

2)結果集難以處理。

3)到處都強制檢查SQLException,影響代碼的美觀和可讀性。

二、熟悉DBUtils

在使用DBUtils之前,應該注意一些問題:

1)DBUtils是JDBC的簡單封裝,可以和JDBC混合使用。

2)DBUtils對結果集自動封裝為JavaBean是有着苛刻要求的:

必須滿足JavaBean的規範;

其次Bean的getter與setter方法的名字與結果集的列名必須一一對應;

不要求JavaBean的私有成員與表結果集列名一一對應。

3)DBUtils可以将結果集封裝為各種類型

主要有:Bean/List,Map/List/Map,數組/List,列/List,這些類型。

對于Map的類型使用KeyedHandler作為結果集處理器,内層的Map是“列名-值"對,外層的Map是“主鍵-内層Map的引用”,但此處的主鍵不一定就是資料庫的主鍵,可以随意指定。

4)DBUtils執行插入操作的時候,無法傳回自增主鍵,這是一個很嚴重的問題,當然不能怪DBUtils,可以通過變通的方法來實作,比如在MySQL中,執行完了一個插入SQL後,接着執行SELECT LAST_INSERT_ID()語句,就可以擷取到自增主鍵。

5)DBUtils的性能和JDBC性能是一樣,測試過程中沒發現性能損失,擁有了很高性能的同時,而不失JDBC的靈活性。

6)對于JavaBean的成員類型定義,有一條原則那就是:盡可能使用包裝類型,而不要使用基本類型。

三、API介紹

1、org.apache.commons.dbutils包

DbUtils:一個為簡化JDBC操作的小類庫

AbstractQueryRunner:是抽象類,QueryRunner和AsyncQueryRunner類的基類。

AsyncQueryRunner:可插拔的方式執行SQL查詢,處理結果集。是線程安全的類。

BaseResultSetHandler:把結果集轉換成其它對象的擴充。

BeanProcessor:BeanProcessor比對列名到Bean屬性名,并轉換結果集列到Bean對象的屬性中。

Dbutils:一個JDBC輔助工具集合。

GenerousBeanProcessor:提供了從資料庫列名到JavaBean屬性之間的智能比對。

ProxyFactory:産生JDBC接口的代理實作。

QueryLoader:屬性檔案加載器,主要用于加載屬性檔案中的SQL到記憶體中。

QueryRunner:使用可插拔的政策執行SQL查詢并處理結果集。

ResultSetHandler:把ResultSet轉換為别的對象的工具。

ResultSetIterator:包裝結果集為一個疊代器。

RowProcessor:将ResultSet行轉換為别的對象的工具。

2、org.apache.commons.dbutils.handlers包

AbstractKeyedHandler:KeyedHandler的抽象類。

AbstractListHandler:簡化ResultSetHandler類開發的抽象類,把結果集轉換成List。

ArrayHandler:把結果集中的第一行資料轉成對象數組。

ArrayListHandler:把結果集中的每一行資料都轉成一個對象數組,再存放到List中。

BeanHandler:将結果集中的第一行資料封裝到一個對應的JavaBean執行個體中。

BeanListHandler:将結果集中的每一行資料都封裝到一個對應的JavaBean執行個體中,存放到List裡。

BeanMapHandler:實作了Bean傳回Map集合。結果集所有的行都會轉換成Bean,并根據指定的Key存儲到Map中。

ColumnListHandler:将結果集中某一列的資料存放到List中。

KeyedHandler:将結果集中的每一行資料都封裝到一個Map裡,然後再根據指定的key把每個Map再存放到一個Map裡。

MapHandler:将結果集中的第一行資料封裝到一個Map裡,key是列名,value就是對應的值。

MapListHandler:将結果集中的每一行資料都封裝到一個Map裡,然後再存放到List。

ScalarHandler:将結果集中某一條記錄的其中某一列的資料存成Object。

3、org.apache.commons.dbutils.wrappers包

SqlNullCheckedResultSet:在每個getXXX方法上檢查SQL NULL值的ResultSet包裝類。

StringTrimmedResultSet:删除結果集中字元串前後空格的ResultSet包裝類。

四、重要類詳述

1、DbUtils類

DbUtils提供如關閉連接配接、裝載JDBC驅動程式等正常工作的工具類,裡面的所有方法都是靜态的。

主要方法如下:

1)public static void close(...) throws SQLException

DbUtils類提供了三個重載的close方法。這些方法檢查所提供的參數是不是NULL,如果為空,就關閉Connection、Statement和ResultSet。

2)public static void closeQuietly(...)

bUtils類提供了四個重載的closeQuietly方法。這一類方法不僅能在Connection、Statement和ResultSet為NULL情況下避免關閉,還能隐藏一些在程式中抛出的SQLEeception。

3)public static void commitAndCloseQuietly(Connection conn)

在連接配接内送出SQL,然後關閉連接配接,并且在關閉連接配接時不抛出SQL異常。

4)public static boolean loadDriver(String driverClassName)

此方法載入并注冊JDBC驅動,如果成功就傳回true,失敗傳回false。使用該方法,無需捕捉ClassNotFoundException異常。

2、QueryRunner類

QueryRunner類簡化了SQL查詢,它與ResultSetHandler組合在一起使用可完成大多數資料庫操作,能夠大量減少代碼量。

QueryRunner類提供了兩個構造方法

1)預設的構造方法

2)需要一個javax.sql.DataSource來作參數的構造方法。

3、QueryRunner類的主要方法

1)public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException

執行一個查詢操作,在此查詢中,對象數組中的每個元素值被用來作為查詢語句的置換參數。此方法會自行處理PreparedStatement和ResultSet的建立和關閉。

2)public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException

幾乎與第一種方法一樣;唯一的不同在于它不将資料庫連接配接提供給方法,并且它是從提供給構造方法的資料源(DataSource) 或使用的setDataSource方法中重新獲得Connection。

3)public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException

執行一個不需要置換參數的查詢操作。

4)public int update(Connection conn, String sql, Object[] params) throws SQLException

用來執行一個更新(插入、更新或删除)操作。

5)public int update(Connection conn, String sql) throws SQLException

用于執行一個不需要置換參數的更新操作。

6)insert插入方法

7)batch批處理方法