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

整體架構

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的運行原理,就能大致了解其工作流程了。後續我們將一步一步盡心分析!

Tags: