DAO框架-從“1”開始(一)
背景:
很久(4年)之前寫了一個DAO框架-zxdata(https://github.com/shuimutong/zxdata),這是我寫的第一個框架。因為沒有使用文件,我現在如果要用的話,得從頭看程式碼,不是太實用。zxdata沒有使用連線池,所以練手意義大於使用意義。最近想重寫一個DAO框架,希望能夠方便的使用,在效能方面也有好的表現。
-----分割-------
工作了這麼多年,重寫DAO框架,發現框架不太容易寫:
首先,使用得簡單。不能讓使用者僅僅使用一個框架,得先把框架程式碼看一遍才知道怎麼用。
其次,該封裝的得封裝起來。程式碼一發布,具體怎麼使用?使用哪些?是使用者自己決定的。為了框架的可持續迭代,不能以後升級個實現,導致不相容以前的程式碼。
最後,在封裝的前提下,得儘量給使用者提供足夠的使用自由。框架包含連線池和ORM對映兩個功能,我覺得連線池功能挺好用的,我只想用連線池功能,你框架得能讓我單獨使用。
以上這3點,是我自己想到的要求。如果不全,歡迎評論指出。
萬丈高樓平地起,我是從配置開始設計的。
《配置》
一、連線引數
1、驅動類名
2、連線
3、使用者名稱
4、密碼
二、連線池引數
1、初始連線數
2、最大連線數
3、最大等待時間(0-無限等待)
產生的疑問:
https://www.cnblogs.com/JavaSubin/p/5294721.html
1、看網上介紹,連線數有最小連線數和初始連線數。
這兩個分開配置有什麼說法嗎?
a、如果初始連線數小於最小連線數,那豈不是還要新建?
b、如果初始連線數大於最小連線數,那初始那麼多幹什麼?
2、記得還見過最大空閒連線數。說現在基本不用了。
看了一下,原來連線本來是有有效時間的。這樣就不用考慮主動銷燬連線了,在檢測時無效直接移除就行了。
原話: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、物件層面
物件的新增、更新、查詢、刪除。
2、SQL層面
a、查詢自定義SQL
b、執行自定義SQL
c、call方法:執行儲存過程、函式
3、事務
事務的開啟、關閉、回滾
二、基礎層-連線池
1、功能點
初始化連線、獲取連線、新連線建立
開始想的是,獲取連線的時候如果沒有連線了就等待一會再試,後來參考別的框架發現沒有必要,連線沒有了直接返回連線耗盡完事。簡單、乾脆。
2、注意點
a、預快取設定?
目前沒搞懂是啥
b、連線有效性檢測
連線是否可用
超時連線關閉設定:關閉存活時間較長的連線,防止連線洩露
《功能點-介紹完畢》
整理的功能點就是以上這些,我是用腦圖整理的,整體結構如下:
--欲知接下來如何,請待下回講解--
&n