DBUtils的使用詳解
一:Dbutils是什么?
Dbutils:主要是封裝了JDBC的代碼,簡化Dao層的操作,
作用:幫助java程式員,開發Dao層代碼的簡單框架,
類似于前面的萬能查找搜索等工具類
二:為什么需要Dbutils ?
在使用Dbutils 之前,我們Dao層使用的技術是JDBC,那么分析一下JDBC的弊端:
(1)資料庫鏈接物件、sql陳述句操作物件,封裝結果集物件,這三大物件會重復定義
(2)封裝資料的代碼重復,而且操作復雜,代碼量大
(3)釋放資源的代碼重復
三: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 rsh, Object... params)
QueryRunner(DataSource ds)
update(String sql, Object... params)
query(String sql, ResultSetHandler rsh, Object... params)
3:ResultSetHandle:封裝資料的策略物件------將封裝結果集中的資料,轉換到另一個物件
策略:封裝資料到物件的方式(示例:將資料庫保存在User、保存到陣列、保存到集合)
方法介紹:handle(ResultSet rs)
四:Dbutils快速入門
使用Dbutils注意事項:
(1)需要匯入的jar包:①MySql驅動 ②c3p0包 ③DbUtils包
(2)添加c3p0組態檔
(3)可以自行添加一個JDBCUtils工具類:用來獲取c3p0連接池物件(有 獲取資料源和獲取連接的方法)
代碼演示:
QueryRunner(JDBCUtils.getDataSource())傳入資料源的建構式來獲取連接,這樣不用在每次執行sql的時候傳入連接,效率高
1.增刪改類似 update(String sql, Object… params)
@Test
public void test2(){
//第一步:創建queryRunner物件,用來操作sql陳述句
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
//第二步:創建sql陳述句
String sql = "update user set name = ? where id = ?";
//第三步:執行sql陳述句,params:是sql陳述句的引數
//注意,給sql陳述句設定引數的時候,按照user表中欄位的順序
try {
int update = qr.update(sql, 引數1,引數2);
System.out.println(update);
} catch (SQLException e) {
e.printStackTrace();
}
}
2.查QueryRunner的query方法和ResultSetHandler介面的使用,模擬一個結果集處理類
public class MyHandler {
//查詢會呼叫結果集處理方法,就將結果集存到了list中,實際用的反射!
public List
handle(ResultSet rs) throws SQLException {
// 封裝資料,資料從 Resultset 中獲取
List
list = new ArrayList
由此可知因為結果集可能是物件,集合等多種型別,DButils又將結果集拿出來進行了單獨的撰寫,
3.query測驗
@Test
public void test4(){
//第一步:創建queryRunner物件,用來操作sql陳述句
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
//第二步:創建sql陳述句
String sql = "select * from user";
//第三步:執行sql陳述句,params:是sql陳述句的引數
//注意,給sql陳述句設定引數的時候,按照user表中欄位的順序
try {
List
list = qr.query(sql, new MyHandler());
System.out.println(list);
} catch (SQLException e) {
e.printStackTrace();
}
}
DbUtils給我們提供了10個ResultSetHandler實作類,分別是:
①ArrayHandler: 將查詢結果的第一行資料,保存到Object陣列中
②ArrayListHandler 將查詢的結果,每一行先封裝到Object陣列中,然后將資料存入List集合
③BeanHandler 將查詢結果的一行資料,封裝到user物件
④BeanListHandler 將查詢結果的每一行封裝到user物件,然后再存入List集合
⑤ColumnListHandler 查詢指定欄位所有的值封裝到List集合中
⑥MapHandler 將查詢結果的第一行資料封裝到map結合
⑦MapListHandler 將查詢結果的每一行封裝到map集合,再將map集合存入List集合
⑧BeanMapHandler 將查詢結果的每一行資料,封裝到User物件,再存入mao集合中
⑨KeyedHandler 將查詢的結果的每一行資料,封裝到map1,然后將map1集合(有多個)存入map2集合(只有一個)
⑩ScalarHandler 查詢指定物件的指定欄位的值或者是查詢封裝類似count、avg、max、min、sum…函式的執行結果
以上10個ResultSetHandler實作類,常用的BeanHandler、BeanListHandler和ScalarHandler
總結:DBUtils是個小巧的JDBC輕量級封裝的工具包,其最核心的特性是結果集的封裝,可以直接將查詢出來的結果集封裝成JavaBean,這就為我們做了最枯燥乏味、最容易出錯的一大部分作業,
在使用DBUtils之前,應該注意一些問題:
1、DBUtils是JDBC的簡單封裝,可以和JDBC混合使用,
2、DBUtils對結果集自動封裝為JavaBean是有著苛刻要求的:必須滿足JavaBean的規范,其次Bean的getter與setter方法的名字與結果集的列名一一對應,而不要求JavaBean的私有成員與表結果集列名一一對應,
3、DBUtils的性能和JDBC性能是一樣,測驗程序中沒發現性能損失,擁有了很高性能的同時,而不失JDBC的靈活性,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/167419.html
標籤:其他
