1. 程式人生 > >DAO框架-從“1”開始(一)

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