簡介
環(huán)境要求
- jdk-1.8
- idea
- https://github.com/sumcolin/orm-persistence.git
細則
- ORM-1-Traditional
- ORM-2-Persistence
- ORM-Question
ORM-1-Traditional
Traditional Way
- 數(shù)據(jù)庫驅(qū)動加載
- 通過驅(qū)動建立數(shù)據(jù)庫鏈接
- 建立預處理sql語句
- 獲取結(jié)果集
- 釋放資源
question
- 導致硬編碼過多,不易維護
- 導致頻繁的調(diào)用數(shù)據(jù)庫鏈接秀姐,資源消耗大
resolve way
- 使用數(shù)據(jù)庫連接池若贮,作為數(shù)據(jù)庫連接
- 使用xml文件管理sql硬編碼,以及結(jié)果集處理
- 依賴反射與內(nèi)省等底層技術(shù)谴麦,自動將實體與表進行屬性與字段的自動映射
ORM-2-Persistence
Persistence Way
思路
- 數(shù)據(jù)庫配置參數(shù)、sql語句進行xml配置文件化
- 通過解析配置文件匾效,加載數(shù)據(jù)庫源配置與sql語句對象化
- 通過工廠模式實現(xiàn)sqlSession的生成
- 通過反射與動態(tài)代理實現(xiàn)數(shù)據(jù)庫的查詢操作
初始化
- 編輯xml文件
- 數(shù)據(jù)庫源相關(guān)配置編輯到sqlMapConfig.xml
- sql語句配置xxxMapper.xml
- 通過dom4j對資源文件xml進行解析,并存儲到數(shù)據(jù)庫pojo對象
Sql執(zhí)行前
- 對其方法進行JDK動態(tài)代理增強,實現(xiàn)面向接口開發(fā)
sql執(zhí)行
- 使用BoundSql方法使其sql參數(shù)類型和語句進行調(diào)整野宜,返回正常的sql與preparedStatement
- 調(diào)用原生JDBC流程
Sql執(zhí)行后
- 通過內(nèi)省對resultSet進行封裝
ORM-Question
Java-數(shù)據(jù)庫連接池
常用數(shù)據(jù)庫連接池
- HikariCP
- C3P0
- BoneCP
- Druid
原因
- 創(chuàng)建線程是一個昂貴的操作,如果有大量的小任務需要執(zhí)行河胎,并且頻繁地創(chuàng)建與銷毀線程旬牲。實際上會消耗大量的系統(tǒng)資源仿粹,往往創(chuàng)建與銷毀時消耗線程所耗費的時間比執(zhí)行時的線程時間更長原茅。所以堕仔,為了提高效率,會選擇線程池
好處
- 數(shù)據(jù)庫連接可以復用線程鏈接摩骨,減少頻繁的數(shù)據(jù)庫鏈接與關(guān)閉。
原理
- 連接池就是為數(shù)據(jù)庫連接建立一個“緩沖池”昌罩。預先在緩沖池中放入一定數(shù)量的連接灾馒,當需要建立數(shù)據(jù)庫連接時,只需從“緩沖池”中取出一個睬罗,使用完畢之后再放回去。
- 通過連接池容达,我們只要在系統(tǒng)啟動時預先加載好一些連接對象,當需要的時候再也不需要繁瑣的步驟羡滑,現(xiàn)成的給你準備好啦算芯,拿了就用柒昏,用完了放回去下次再接著用也祠,系統(tǒng)加載的速度會變快,性能也會隨之增加了
反射與內(nèi)省
動態(tài)代理
- JDK動態(tài)代理堪旧,實現(xiàn)方式:生成代理對象的時候需要一個攔截器 InvocationHandler 因此咱們需要寫一個攔截器削葱,必須有接口類