?今天是劉小愛自學(xué)Java的第69天涝滴。
感謝你的觀看绣版,謝謝你。
話不多說歼疮,開始今天的學(xué)習(xí):
這幾天的學(xué)習(xí)杂抽,什么Jdbc六步驟,Jdbc的封裝韩脏、sql注入與預(yù)編譯缩麸,自定義連接池。
本質(zhì)上一直在做一件事情赡矢,封裝工具類JdbcUtil杭朱,并一步一步將其優(yōu)化。
其實不需要我們自己封裝吹散,有現(xiàn)成的框架可以直接用弧械,但學(xué)習(xí)階段,自己將其過一遍也是很有必要的空民。
并且學(xué)的是這種封裝思想刃唐。昨天自己嘗試著用動態(tài)代理寫了一個連接池,當(dāng)然市面上也有幾個開源連接池:c3p0以及阿里的德魯伊界轩。
既然是開源画饥,那么經(jīng)過多版本的迭代,功能肯定更加地強(qiáng)大浊猾,使用起來也更加地方便抖甘。
一、c3p0連接池
看c3p0官網(wǎng):
個人習(xí)慣喜歡將瀏覽器設(shè)置成將網(wǎng)頁英文翻譯成中文葫慎,其實最好的還是要自己學(xué)著看英文文檔衔彻。
只能說這還需要一個比較長的時間去適應(yīng)。
①下載地址
點進(jìn)去可以下載最新版的c3p0幅疼。
②文檔說明
也就相當(dāng)于工具說明書,不然別人也不知道怎么使用c3p0昼接,那么具體如何使用爽篷?
1直接編寫代碼
完全就是看說明書,寫的很明白了:
①導(dǎo)包
將說明中的這兩個jar包導(dǎo)入開發(fā)工具IDEA即可慢睡。
②創(chuàng)建數(shù)據(jù)源
文檔中有編寫的代碼模板逐工,我們只需要復(fù)制過來修改其中的參數(shù)就可以了铡溪,這些參數(shù)都很熟悉。
也就是數(shù)據(jù)庫四大金剛:
mysql驅(qū)動路徑
數(shù)據(jù)庫url路徑
用戶名
密碼
好泪喊,代碼編寫完畢棕硫。但是這種是代碼直接編寫。
前幾天學(xué)過配置文件袒啼,將這幾個常用參數(shù)放入配置文件里面哈扮,這樣代碼也能更具有可拓展性。
2使用配置文件
既然我們都能想到配置文件蚓再,那官方文檔中自然也會有它的說明滑肉,繼續(xù)看文檔:
①配置方法
其中有四種配置方式,最常見的是使用xml來配置摘仅。
②xml文件的設(shè)置
其中文件名要以“c3p0-config.xml”的命名規(guī)則靶庙,不然沒法運行,并且要放在IDEA的src路徑里面娃属。
至于其配置文件如何編寫六荒,一樣還是繼續(xù)套用模板,我們只需要修改其中的屬性矾端,網(wǎng)上一搜也會一大堆:
①數(shù)據(jù)庫連接參數(shù)
也就是數(shù)據(jù)庫四大金剛掏击,設(shè)置成自己的,不再贅述须床。
②連接池參數(shù)
這個在具體的項目中設(shè)置不同的參數(shù)铐料,其實理解起來也都是見名知意的,直接用軟件翻譯:
initialPoolSize:初始化連接池大小
maxIdleTime:最大空閑時間
maxPoolSize:連接池最大容量
minPoolSize:連接池最小容量
maxStatements:最大語句對象
3做一個測試
最后代碼編寫完了豺旬,做一個測試钠惩,同時也再回顧一遍連接數(shù)據(jù)庫的代碼:
①配置c3p0連接池
如果有xml配置文件,那么配置信息不用再逐個設(shè)置了族阅。
②從連接池中獲取連接
直接從c3p0連接池中獲取連接篓跛。
③預(yù)編譯及處理結(jié)果
這塊代碼也寫了好多遍了,不再贅述坦刀。
④釋放資源
close方法本來的意思是將連接銷毀掉愧沟,但事實上c3p0中close方法是將連接返回到連接池中而不是銷毀。
也就是說和昨天自定義的連接池一樣鲤遥,也將連接的close方法改造了沐寺。
我嘗試著看了下c3p0中的源碼,但實在是看不懂……
據(jù)說在c3p0中使用的是裝飾設(shè)計模式盖奈,我們昨天使用的是動態(tài)代理實現(xiàn)該需求混坞。
具體為何要用裝飾設(shè)計模式而不是動態(tài)代理也不清楚。
二、Druid
在全球最大的同性交友網(wǎng)站GitHub中可以找到Druid:
中文譯名:德魯伊究孕。這是阿里開源的一個數(shù)據(jù)庫連接池啥酱。
Druid是目前最好的數(shù)據(jù)庫連接池。在功能厨诸、性能镶殷、擴(kuò)展性方面,都超過其他數(shù)據(jù)庫連接池微酬。
想想一年一度的雙十一绘趋,春運的搶火車票也就能理解了。
①創(chuàng)建德魯伊對象
我們可以發(fā)現(xiàn)其API還是那些屬性設(shè)置得封,當(dāng)然這是最基礎(chǔ)的4個埋心,還有一些比如連接池大小什么的。
②配置文件druid.properties
同樣的道理忙上,可以將這些屬性放到一個配置文件里面拷呆,從而提高代碼的拓展性。c3p0中使用的是xml疫粥,德魯伊中使用properties茬斧。
配置文件完成,那如何使用它呢梗逮?
①工廠設(shè)計模式
DruidDataSourceFactory项秉,德魯伊數(shù)據(jù)源工廠,既然是工廠那通過它就可以直接創(chuàng)建數(shù)據(jù)源慷彤。
其中參數(shù)即為所編寫的配置文件娄蔼。
其余步驟也就是連接數(shù)據(jù)庫的常規(guī)操作了。
②從連接池中獲取連接
③預(yù)編譯及處理結(jié)果
④釋放資源
同樣的道理底哗,德魯伊中也改造了連接的close方法岁诉。
三、工具類的封裝優(yōu)化
今天學(xué)了連接池跋选,那么也可以把連接池封裝進(jìn)工具類JdbcUtil中涕癣,比如說我們使用德魯伊連接池:
①將德魯伊封裝進(jìn)JdbcUtil類中
通過工廠設(shè)計模式獲取數(shù)據(jù)源
②獲取連接封裝
通過德魯伊數(shù)據(jù)源獲取連接
③釋放資源
其中連接的close方法被改造了,并不是釋放連接而是將連接放回連接池前标。
優(yōu)化好JdbcUtil類后坠韩,再直接用JdbcUtil類獲取連接,實際上就是德魯伊連接池的連接炼列。
最后
謝謝你的觀看只搁。
如果可以的話,麻煩幫忙點個贊俭尖,謝謝你氢惋。