一躺盛、DBUtils簡介
1、DBUtils是Apache Commons組件中的一員形帮,開源免費(fèi)
2槽惫、DBUtils是對JDBC的簡單封裝,但是它還是被很多公司使用
3辩撑、DBUtils的jar包:dbutils.jar
二界斜、DBUtils主要類
1、DbUtils:都是靜態(tài)方法合冀,一系列的close方法各薇;
2、QueryRunner:
(1)update():執(zhí)行insert君躺、update峭判、delete
(2)query():執(zhí)行select語句
(3)batch():執(zhí)行批處理
三、QueryRunner之更新
queryRunner的update()方法可以用來執(zhí)行insert棕叫、update林螃、delete語句
1、創(chuàng)建QueryRunner
構(gòu)造器:QueryRunner()俺泣;
2治宣、update()方法
@Test
public void fun1() throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "insert into user values(?,?,?)";
qr.update(JdbcUtils.getConnection(), sql, "u1", "zhangSan", "123");
}
@Test
public void fun2() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "insert into user values(?,?,?)";
qr.update(sql, "u1", "zhangSan", "123");
}
在fun2()中急侥,在創(chuàng)建QueryRunner時傳遞了連接池對象,那么在調(diào)用update()方法時就不用再傳遞Connection了侮邀。
四坏怪、ResultSetHandler
在jdbc中執(zhí)行select語句之后會得到一個ResultSet,然后我們需要對ResultSet進(jìn)行轉(zhuǎn)換绊茧,得到最終我們想要的數(shù)據(jù)铝宵。你可能希望把ResultSet的數(shù)據(jù)放在一個list中、Map中华畏、Bean中鹏秋。DBUtils提供了一個接口ResultHandler,它就是用來把ResultSet轉(zhuǎn)換成目標(biāo)類型的工具亡笑。你可以自己去實(shí)現(xiàn)這個接口侣夷,把ResultSet轉(zhuǎn)換成你想要的類型。
(1)MapHandler:單行處理器仑乌!把結(jié)果集轉(zhuǎn)換成Map<String,Object>百拓,其中列名為鍵!
(2)MapListHandler:多行處理器晰甚!把結(jié)果集轉(zhuǎn)換成List<Map<String,Object>>衙传;
(3)BeanHandler:單行處理器!把結(jié)果集轉(zhuǎn)換成Bean厕九,該處理器需要Class參數(shù)蓖捶,即Bean的類型;
(4)BeanListHandler:多行處理器扁远!把結(jié)果集轉(zhuǎn)換成List<Bean>俊鱼;
(5)ColumnListHandler:多行單列處理器!把結(jié)果集轉(zhuǎn)換成List<Object>畅买,使用ColumnListHandler時需要指定某一列的名稱或編號并闲,例如:new ColumListHandler(“name”)表示把name列的數(shù)據(jù)放到List中。
(6)ScalarHandler:單行單列處理器皮获!把結(jié)果集轉(zhuǎn)換成Object焙蚓。一般用于聚集查詢纹冤,例如select count(*) from tab_student洒宝。
Map處理器
Bean處理器
Column處理器
Scalar處理器
五、QueryRunner之查詢
QueryRunner的查詢方法是:
public <T> T query(String sql, ResultSetHandler<T> rh, Object… params)
public <T> T query(Connection con, String sql, ResultSetHandler<T> rh, Object… params)
query()方法會通過sql語句和params查詢出ResultSet萌京,然后通過rh把ResultSet轉(zhuǎn)換成對應(yīng)的類型再返回雁歌。
以下演示查詢數(shù)據(jù)庫中所有數(shù)據(jù),并將結(jié)果以MapListHandler()的形式打又小:
@Test
public void fun2() throws SQLException {
DataSource ds = JdbcUtils.getDataSource();
QueryRunner qr = new QueryRunner(ds);
String sql = "select * from tab_student";
List<Map<String,Object>> list = qr.query(sql, new MapListHandler());
for(Map<String,Object> map : list) {
System.out.println(map);
}
}
QueryRunner之批處理
QueryRunner還提供了批處理方法:batch()靠瞎。
我們更新一行記錄時需要指定一個Object[]為參數(shù),如果是批處理,那么就要指定Object[][]為參數(shù)了乏盐。即多個Object[]就是Object[][]了佳窑,其中每個Object[]對應(yīng)一行記錄:
@Test
public void fun10() throws SQLException {
DataSource ds = JdbcUtils.getDataSource();
QueryRunner qr = new QueryRunner(ds);
String sql = "insert into tab_student values(?,?,?,?)";
Object[][] params = new Object[10][];//表示 要插入10行記錄
for(int i = 0; i < params.length; i++) {
params[i] = new Object[]{"S_300" + i, "name" + i, 30 + i, i%2==0?"男":"女"};
}
qr.batch(sql, params);
}