整體架構
version-3.5.5
在深入瞭解Mybatis的原始碼之前,我們先了解一下Mybatis的整體架構和工作原理,這樣有助於我們在閱讀原始碼過程中瞭解思路和流程。
核心流程
在上一遍的入門程式中,我們通過示例程式碼簡單的介紹瞭如何通過Myabtis進行一個簡單的增刪改查,並用簡單的步驟描述了示例程式的執行過程。為了更直觀,其工作原理可理解成如下步驟:
- 初始化階段:讀取XML配置檔案和註解中的配置資訊,建立配置物件,並完成各個模組的初始化的工作
- 代理階段:封裝iBatis的程式設計模型,使用mapper介面開發的初始化工作
- 資料讀寫階段:資料讀寫階段:通過SqlSession完成SQL的解析,引數的對映、SQL的執行、結果的解析過程
整體架構
我們從工作原理圖中也能看到架構的影子。這是一個Mybatis的邏輯劃分架構圖,可以分成三層
- 介面層:通SqlSession類提供對資料庫訪問能力,隱藏了後續複雜的處理邏輯。
- 核心處理層:主要負責執行SQL,並返回結果
- 基礎支援層:對一些基礎功能進行封裝,為核心處理層提供服務。
程式碼結構
Mybatis的工程結構非常的清晰,基本上通過報名就可以瞭解到該模組的功能使用場景,能非常迅速的幫我們定位程式碼和了解功能。
- annotations:註解配置
- binding:繫結、代理 提供 Mapper 介面與 XML 對映檔案進行關聯的支援
- builder:構建、配置解析
- cache:快取
- cursor:遊標
- datasource:資料來源
- exceptions:異常(基本上每個包下都有自己的自定義異常)
- executor: SQL執行器
- io:資源載入
- jdbc:jdbc操作
- lang:語言 UsesJava7、UsesJava8
- logging:日誌支援
- mapping:對映引數、結果、SQL
- parsing:解析器 XPath、Token解析
- plugin:外掛支援
- reflection:反射功能封裝
- scripting:指令碼
- session: 會話
- transaction:事務
- type:型別 jdbcType,javaType互轉
- util:工具包
設計模式
原始碼中使用了很多的設計模式
- SqlSession使用門面模式
- 日誌模組使用了介面卡模式
- 資料來源模組使用工廠模式
- 資料連線池使用策略模式
- 快取模組使用了裝飾器模式
- Executor模組使用了模板方法模式
- Builder模組使用了建造者模式
- Mapper介面使用了代理模式
- 外掛模組使用責任鏈模式
總結
總的來說,Mybatis的程式碼還算比較好理解的,相對簡單易懂。在瞭解JDBC的操作原理後,在結合Mybatis的執行原理,就能大致瞭解其工作流程了。後續我們將一步一步盡心分析!