背景:html
好久(4年)以前寫了一個DAO框架-zxdata(https://github.com/shuimutong/zxdata),這是我寫的第一個框架。由於沒有使用文檔,我如今若是要用的話,得從頭看代碼,不是太實用。zxdata沒有使用鏈接池,因此練手意義大於使用意義。最近想重寫一個DAO框架,但願可以方便的使用,在性能方面也有好的表現。java
-----分割-------mysql
工做了這麼多年,重寫DAO框架,發現框架不太容易寫:git
首先,使用得簡單。不能讓使用者僅僅使用一個框架,得先把框架代碼看一遍才知道怎麼用。github
其次,該封裝的得封裝起來。代碼一發布,具體怎麼使用?使用哪些?是用戶本身決定的。爲了框架的可持續迭代,不能之後升級個實現,致使不兼容之前的代碼。sql
最後,在封裝的前提下,得儘可能給用戶提供足夠的使用自由。框架包含鏈接池和ORM映射兩個功能,我以爲鏈接池功能挺好用的,我只想用鏈接池功能,你框架得能讓我單獨使用。緩存
以上這3點,是我本身想到的要求。若是不全,歡迎評論指出。框架
萬丈高樓平地起,我是從配置開始設計的。函數
《配置》post
1、鏈接參數
一、驅動類名
二、鏈接
三、用戶名
四、密碼
2、鏈接池參數
一、初始鏈接數
二、最大鏈接數
三、最大等待時間(0-無限等待)
產生的疑問:
https://www.cnblogs.com/JavaSubin/p/5294721.html
一、看網上介紹,鏈接數有最小鏈接數和初始鏈接數。
這兩個分開配置有什麼說法嗎?
a、若是初始鏈接數小於最小鏈接數,那豈不是還要新建?
b、若是初始鏈接數大於最小鏈接數,那初始那麼多幹什麼?
二、記得還見過最大空閒鏈接數。說如今基本不用了。
看了一下,原來鏈接原本是有有效時間的。這樣就不用考慮主動銷燬鏈接了,在檢測時無效直接移除就好了。
原話:maxIdle的屬性,表示最大空閒鏈接數,超過的空閒鏈接將被釋放,默認值爲8。對應的該屬性在Druid鏈接池已再也不使用,配置了也沒有效果
參考配置:
##驅動名稱 driverName=com.mysql.jdbc.Driver ##鏈接url connectionUrl=jdbc:mysql://localhost:3306/simple?useServerPrepStmts=false&rewriteBatchedStatements=true&connectTimeout=1000&useUnicode=true&characterEncoding=utf-8 ##用戶名 userName=simple ##用戶密碼 userPassword=123456 ##初始化鏈接數 initConnectionNum=10 ##最大鏈接數 maxConnectionNum=50 ##最大查詢等待時間 maxQueryTime=3
《配置-介紹完畢》
配置就是以上這些。配置列好以後,開始整理功能點。
《功能點》
我把功能點按照使用層級來分的。
1、最上層
一、對象層面
對象的新增、更新、查詢、刪除。
二、SQL層面
a、查詢自定義SQL
b、執行自定義SQL
c、call方法:執行存儲過程、函數
三、事務
事務的開啓、關閉、回滾
2、基礎層-鏈接池
一、功能點
初始化鏈接、獲取鏈接、新鏈接建立
開始想的是,獲取鏈接的時候若是沒有鏈接了就等待一會再試,後來參考別的框架發現沒有必要,鏈接沒有了直接返回鏈接耗盡完事。簡單、乾脆。
二、注意點
a、預緩存設置?
目前沒搞懂是啥
b、鏈接有效性檢測
鏈接是否可用
超時鏈接關閉設置:關閉存活時間較長的鏈接,防止鏈接泄露
《功能點-介紹完畢》
整理的功能點就是以上這些,我是用腦圖整理的,總體結構以下:
--欲知接下來如何,請看下回講解--