一孵运、JDBC連接池
概念:實(shí)際開(kāi)發(fā)中“獲得連接”或“釋放資源”是非常消耗系統(tǒng)資源的兩個(gè)過(guò)程螟够,為了解決這個(gè)問(wèn)題彤断,通過(guò)我們采用連接池技術(shù)怕品,來(lái)共享鏈接Connection妇垢,解決資源浪費(fèi),提高代碼性能肉康,代碼沒(méi)有節(jié)省
規(guī)范:java為數(shù)據(jù)庫(kù)連接池提供了公共的接口 javax.sql.DataSource闯估,常見(jiàn)的連接池:DBCP\C3P0都用不同的方法實(shí)現(xiàn)了這個(gè)接口
二、C3P0連接池
- 使用步驟
1. 導(dǎo)入2個(gè)jar包
2.配置文件設(shè)置參數(shù)
配置文件名稱:c3p0-config.xml(固定)
配置文件位置:src(類路徑)
配置文件內(nèi)容:修改常見(jiàn)配置項(xiàng)包括必須項(xiàng)user吼和,password涨薪,diverClass(驅(qū)動(dòng),如com.mysql.jdbc.Driver)炫乓,jdbcUrl(mysql路徑,如jdbc:mysql://localhost:3306/數(shù)據(jù)庫(kù)名稱)和一些其他的基本配置項(xiàng)
3.編寫工具類
c3p0提供核心工具類:ComboPooledDataSource娄徊,要使用連接池就必須創(chuàng)建該類的實(shí)例對(duì)象(注意區(qū)分命名配置和默認(rèn)配置)
此外,需要自己創(chuàng)建一個(gè)工具類泵肄,例如C3P0Utils楚堤,該類的代碼應(yīng)包括如下
三、使用DBUtils操作增刪改查
- 概念:如果只使用JDBC開(kāi)發(fā)塔粒,會(huì)有大量冗余代碼结借,為了簡(jiǎn)化開(kāi)發(fā)就使用apache commons組件的成員之一:DBUtils(封裝了對(duì)JDBC的操作)
- 三個(gè)核心功能
1.QueryRunner中提供對(duì)sql語(yǔ)句操作的API
2.ResultSetHandler接口,用于定義select操作后卒茬,怎樣封裝結(jié)果集
3.DbUtils類船老,它就是一個(gè)工具類咖熟,定義了關(guān)閉資源與事務(wù)處理的方法
四、 QueryRunner核心類
- QueryRunner(DataSource ds)柳畔,提供數(shù)據(jù)源(連接池)馍管,DBUtils底層自動(dòng)維護(hù)鏈接connection
- update(String sql,Object..params)薪韩,執(zhí)行更新數(shù)據(jù)
- 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()方法會(huì)通過(guò)sql語(yǔ)句和params查詢出ResultSet确沸,然后通過(guò)rh把ResultSet轉(zhuǎn)換成對(duì)應(yīng)的類型再返回
五、ResultSetHandler結(jié)果集處理類
- 執(zhí)行select語(yǔ)句之后得到的是ResultSet俘陷,然后對(duì)ResultSet進(jìn)行轉(zhuǎn)換罗捎,得到最終我們想要的數(shù)據(jù)±埽可以把ResultSet的數(shù)據(jù)放到一個(gè)List中桨菜,也可以放到一個(gè)Map中,或是一個(gè)Bean中捉偏。
- DBUtils提供了一個(gè)接口ResultSetHandler倒得,它就是用來(lái)將ResultSet轉(zhuǎn)換成目標(biāo)類型的工具。
案例講解: -
BeanListHandler的使用:
-
BeanHandler的使用:
該方法中調(diào)用query(sql,rsh,param)夭禽,其中第三個(gè)參數(shù)需要現(xiàn)在該方法括號(hào)內(nèi)聲明變量霞掺,且該方法直接聲明為Product類型,所以將查詢返回的單一的查詢結(jié)果直接return讹躯。
六根悼、DBUtils工具類
closeQuietly(Connection conn)關(guān)閉連接,如果有異常try后不拋出
commitAndCloseQuietly(Connection conn)提交并關(guān)閉連接
rollbackAndCloseQuietly(Connection conn)回滾并關(guān)閉連接
綜合案例
-
案例——?jiǎng)h除
- 案例——查詢1
public void fun1() throws SQLException {
DataSource ds = JdbcUtils.getDataSource();
QueryRunner qr = new QueryRunner(ds);
String sql = "select * from tab_student where number=?";
Map<String,Object> map = qr.query(sql, new MapHandler(), "S_2000");
System.out.println(map);
}
- 案例——查詢2
public void fun2() throws SQLException {
DataSource ds = JdbcUtils.getDataSource();
QueryRunner qr = new QueryRunner(ds);
String sql = "select * from tab_student where number=?";
Student stu = qr.query(sql, new BeanHandler<Student>(Student.class), "S_2000");
System.out.println(stu);
}
八蜀撑、JavaBean組件
- 概念:JavaBean就是一個(gè)類挤巡,在開(kāi)發(fā)中常用于封裝數(shù)據(jù)
- 特性
- 需要實(shí)現(xiàn)接口:java.io.Serializable (通常省略不寫)
- 提供私有字段:private 類型 字段名;
- 提供getter/setter方法
- 提供無(wú)參函數(shù)
-
舉例