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