国产三级农村妇女在线,国产精品毛片a∨一区二区三区,国产乱子伦视频大全,国产精品色拉拉,国产欧美日韩一区二区三区,

首頁 > 技術(shù) > Linux

Apache Commons DbUtils工具包使用介紹

Linux 2022-11-28 12:35:00

一、介紹

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

JDBC代碼開發(fā),存在很多難點:
1)操作過程復雜,代碼操作一個模式,大量的重復。
2)結(jié)果集難以處理。
3)到處都強制檢查SQLException,影響代碼的美觀和可讀性。

二、熟悉DBUtils

在使用DBUtils之前,應該注意一些問題:
1)DBUtils是JDBC的簡單封裝,可以和JDBC混合使用。
2)DBUtils對結(jié)果集自動封裝為JavaBean是有著苛刻要求的:
必須滿足JavaBean的規(guī)范;
其次Bean的getter與setter方法的名字與結(jié)果集的列名必須一一對應;
不要求JavaBean的私有成員與表結(jié)果集列名一一對應。
3)DBUtils可以將結(jié)果集封裝為各種類型
主要有:Bean/List,Map/List/Map,數(shù)組/List<數(shù)組>,列/List<列>,這些類型。

對于Map的類型使用KeyedHandler作為結(jié)果集處理器,內(nèi)層的Map是"列名-值"對,外層的Map是"主鍵-內(nèi)層Map的引用",但此處的主鍵不一定就是數(shù)據(jù)庫的主鍵,可以隨意指定。
4)DBUtils執(zhí)行插入操作的時候,無法返回自增主鍵,這是一個很嚴重的問題,當然不能怪DBUtils,可以通過變通的方法來實現(xiàn),比如在MySQL中,執(zhí)行完了一個插入SQL后,接著執(zhí)行SELECT LAST_INSERT_ID()語句,就可以獲取到自增主鍵。
5)DBUtils的性能和JDBC性能是一樣,測試過程中沒發(fā)現(xiàn)性能損失,擁有了很高性能的同時,而不失JDBC的靈活性。
6)對于JavaBean的成員類型定義,有一條原則那就是:盡可能使用包裝類型,而不要使用基本類型。

三、API介紹

1、org.apache.commons.dbutils包
DbUtils:一個為簡化JDBC操作的小類庫
AbstractQueryRunner:是抽象類,QueryRunner和AsyncQueryRunner類的基類。
AsyncQueryRunner:可插拔的方式執(zhí)行SQL查詢,處理結(jié)果集。是線程安全的類。
BaseResultSetHandler:把結(jié)果集轉(zhuǎn)換成其它對象的擴展。
BeanProcessor:BeanProcessor匹配列名到Bean屬性名,并轉(zhuǎn)換結(jié)果集列到Bean對象的屬性中。
Dbutils:一個JDBC輔助工具集合。
GenerousBeanProcessor:提供了從數(shù)據(jù)庫列名到JavaBean屬性之間的智能匹配。
ProxyFactory:產(chǎn)生JDBC接口的代理實現(xiàn)。
QueryLoader:屬性文件加載器,主要用于加載屬性文件中的SQL到內(nèi)存中。
QueryRunner:使用可插拔的策略執(zhí)行SQL查詢并處理結(jié)果集。
ResultSetHandler:把ResultSet轉(zhuǎn)換為別的對象的工具。
ResultSetIterator:包裝結(jié)果集為一個迭代器。
RowProcessor:將ResultSet行轉(zhuǎn)換為別的對象的工具。

2、org.apache.commons.dbutils.handlers包
AbstractKeyedHandler:KeyedHandler的抽象類。
AbstractListHandler:簡化ResultSetHandler類開發(fā)的抽象類,把結(jié)果集轉(zhuǎn)換成List。
ArrayHandler:把結(jié)果集中的第一行數(shù)據(jù)轉(zhuǎn)成對象數(shù)組。
ArrayListHandler:把結(jié)果集中的每一行數(shù)據(jù)都轉(zhuǎn)成一個對象數(shù)組,再存放到List中。
BeanHandler:將結(jié)果集中的第一行數(shù)據(jù)封裝到一個對應的JavaBean實例中。
BeanListHandler:將結(jié)果集中的每一行數(shù)據(jù)都封裝到一個對應的JavaBean實例中,存放到List里。
BeanMapHandler:實現(xiàn)了Bean返回Map集合。結(jié)果集所有的行都會轉(zhuǎn)換成Bean,并根據(jù)指定的Key存儲到Map中。
ColumnListHandler:將結(jié)果集中某一列的數(shù)據(jù)存放到List中。
KeyedHandler:將結(jié)果集中的每一行數(shù)據(jù)都封裝到一個Map里,然后再根據(jù)指定的key把每個Map再存放到一個Map里。
MapHandler:將結(jié)果集中的第一行數(shù)據(jù)封裝到一個Map里,key是列名,value就是對應的值。
MapListHandler:將結(jié)果集中的每一行數(shù)據(jù)都封裝到一個Map里,然后再存放到List。
ScalarHandler:將結(jié)果集中某一條記錄的其中某一列的數(shù)據(jù)存成Object。

3、org.apache.commons.dbutils.wrappers包
SqlNullCheckedResultSet:在每個getXXX方法上檢查SQL NULL值的ResultSet包裝類。
StringTrimmedResultSet:刪除結(jié)果集中字符串前后空格的ResultSet包裝類。

四、重要類詳述

1、DbUtils類

DbUtils提供如關(guān)閉連接、裝載JDBC驅(qū)動程序等常規(guī)工作的工具類,里面的所有方法都是靜態(tài)的。
主要方法如下:
1)public static void close(...) throws SQLException
DbUtils類提供了三個重載的close方法。這些方法檢查所提供的參數(shù)是不是NULL,如果為空,就關(guān)閉Connection、Statement和ResultSet。
2)public static void closeQuietly(...)
bUtils類提供了四個重載的closeQuietly方法。這一類方法不僅能在Connection、Statement和ResultSet為NULL情況下避免關(guān)閉,還能隱藏一些在程序中拋出的SQLEeception。
3)public static void commitAndCloseQuietly(Connection conn)
在連接內(nèi)提交SQL,然后關(guān)閉連接,并且在關(guān)閉連接時不拋出SQL異常。
4)public static boolean loadDriver(String driverClassName)
此方法載入并注冊JDBC驅(qū)動,如果成功就返回true,失敗返回false。使用該方法,無需捕捉ClassNotFoundException異常。

2、QueryRunner類

QueryRunner類簡化了SQL查詢,它與ResultSetHandler組合在一起使用可完成大多數(shù)數(shù)據(jù)庫操作,能夠大量減少代碼量。
QueryRunner類提供了兩個構(gòu)造方法
1)默認的構(gòu)造方法
2)需要一個javax.sql.DataSource來作參數(shù)的構(gòu)造方法。

3、QueryRunner類的主要方法

1)public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException
執(zhí)行一個查詢操作,在此查詢中,對象數(shù)組中的每個元素值被用來作為查詢語句的置換參數(shù)。此方法會自行處理PreparedStatement和ResultSet的創(chuàng)建和關(guān)閉。
2)public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException
幾乎與第一種方法一樣;唯一的不同在于它不將數(shù)據(jù)庫連接提供給方法,并且它是從提供給構(gòu)造方法的數(shù)據(jù)源(DataSource) 或使用的setDataSource方法中重新獲得Connection。
3)public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException
執(zhí)行一個不需要置換參數(shù)的查詢操作。
4)public int update(Connection conn, String sql, Object[] params) throws SQLException
用來執(zhí)行一個更新(插入、更新或刪除)操作。
5)public int update(Connection conn, String sql) throws SQLException
用于執(zhí)行一個不需要置換參數(shù)的更新操作。
6)insert插入方法
7)batch批處理方法

TAg

加載中~

本網(wǎng)站LOGO受版權(quán)及商標保護,版權(quán)登記號:國作登字-2022-F-10126915,未經(jīng)湖南木星科技官方許可,嚴禁使用。
Copyright ? 2012-2022 湖南木星科技有限公司(木星網(wǎng))版權(quán)所有
轉(zhuǎn)載內(nèi)容版權(quán)歸作者及來源網(wǎng)站所有,本站原創(chuàng)內(nèi)容轉(zhuǎn)載請注明來源,商業(yè)媒體及紙媒請先聯(lián)系:aishangyiwan@126.com

工信部備案號:湘ICP備19012813號-5