手寫DAO框架(一)-從「1」開始

背景: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、鏈接有效性檢測

      鏈接是否可用

      超時鏈接關閉設置:關閉存活時間較長的鏈接,防止鏈接泄露

《功能點-介紹完畢》

整理的功能點就是以上這些,我是用腦圖整理的,總體結構以下:

 

--欲知接下來如何,請看下回講解--

 

下篇:手寫DAO框架(二)-開發前的最後準備

相關文章
相關標籤/搜索