【Mybatis原始碼解析】- 整體架構及原理

黑米麵包派發表於2021-05-17

整體架構

version-3.5.5

在深入瞭解Mybatis的原始碼之前,我們先了解一下Mybatis的整體架構和工作原理,這樣有助於我們在閱讀原始碼過程中瞭解思路和流程。

核心流程

在上一遍的入門程式中,我們通過示例程式碼簡單的介紹瞭如何通過Myabtis進行一個簡單的增刪改查,並用簡單的步驟描述了示例程式的執行過程。為了更直觀,其工作原理可理解成如下步驟:
image

  • 初始化階段:讀取XML配置檔案和註解中的配置資訊,建立配置物件,並完成各個模組的初始化的工作
  • 代理階段:封裝iBatis的程式設計模型,使用mapper介面開發的初始化工作
  • 資料讀寫階段:資料讀寫階段:通過SqlSession完成SQL的解析,引數的對映、SQL的執行、結果的解析過程

整體架構

image

我們從工作原理圖中也能看到架構的影子。這是一個Mybatis的邏輯劃分架構圖,可以分成三層

  • 介面層:通SqlSession類提供對資料庫訪問能力,隱藏了後續複雜的處理邏輯。
  • 核心處理層:主要負責執行SQL,並返回結果
  • 基礎支援層:對一些基礎功能進行封裝,為核心處理層提供服務。

程式碼結構

image

Mybatis的工程結構非常的清晰,基本上通過報名就可以瞭解到該模組的功能使用場景,能非常迅速的幫我們定位程式碼和了解功能。

  1. annotations:註解配置
  2. binding:繫結、代理 提供 Mapper 介面與 XML 對映檔案進行關聯的支援
  3. builder:構建、配置解析
  4. cache:快取
  5. cursor:遊標
  6. datasource:資料來源
  7. exceptions:異常(基本上每個包下都有自己的自定義異常)
  8. executor: SQL執行器
  9. io:資源載入
  10. jdbc:jdbc操作
  11. lang:語言 UsesJava7、UsesJava8
  12. logging:日誌支援
  13. mapping:對映引數、結果、SQL
  14. parsing:解析器 XPath、Token解析
  15. plugin:外掛支援
  16. reflection:反射功能封裝
  17. scripting:指令碼
  18. session: 會話
  19. transaction:事務
  20. type:型別 jdbcType,javaType互轉
  21. util:工具包

設計模式

原始碼中使用了很多的設計模式

  • SqlSession使用門面模式
  • 日誌模組使用了介面卡模式
  • 資料來源模組使用工廠模式
  • 資料連線池使用策略模式
  • 快取模組使用了裝飾器模式
  • Executor模組使用了模板方法模式
  • Builder模組使用了建造者模式
  • Mapper介面使用了代理模式
  • 外掛模組使用責任鏈模式

總結

總的來說,Mybatis的程式碼還算比較好理解的,相對簡單易懂。在瞭解JDBC的操作原理後,在結合Mybatis的執行原理,就能大致瞭解其工作流程了。後續我們將一步一步盡心分析!

相關文章