精盡 MyBatis 原始碼分析 - 整體架構

月圓吖發表於2020-11-22

該系列文件是本人在學習 Mybatis 的原始碼過程中總結下來的,可能對讀者不太友好,請結合我的原始碼註釋(Mybatis原始碼分析 GitHub 地址Mybatis-Spring 原始碼分析 GitHub 地址Spring-Boot-Starter 原始碼分析 GitHub 地址)進行閱讀

MyBatis 版本:3.5.2

MyBatis-Spring 版本:2.0.3

MyBatis-Spring-Boot-Starter 版本:2.1.4

整體架構

本文主要分享 MyBatis 專案的一個整體情況,對 MyBatis 有個整體的瞭解,可以去 MyBatis GitHub 上面 Fork 到你自己的 GitHub 上面,然後拉取到自己本地

專案結構

MyBatis-Structure

根據包名差不多就可以知道每個模組的作用

整體架構

MyBatis 的整體架構分為三層:基礎支援層核心處理層介面層

Structure

按照 MyBatis 這個架構圖從下往上對其進行逐步分析,筆者是根據芋道原始碼《精盡 MyBatis 原始碼分析》一系列文件學習 MyBatis 的,非常感謝~

基礎支援層

基礎支援層,包含整個 MyBatis 的基礎模組,這些模組為核心處理層的功能提供了良好的支撐

  1. 解析器模組:解析檔案,處理佔位符
  2. 反射模組:對 Java 原生的反射進行良好的封裝,進行了一系列的優化,提供更加簡潔易用的 API 方便使用
  3. 異常模組:定義 MyBatis 自己的 Exception
  4. 資料來源模組:提供相應的 DataSource 資料來源實現,支援與第三方資料來源的繼承
  5. 事務模組:對資料庫中的事務進行了抽象,提供事務介面的簡單實現
  6. 快取模組:提供一級快取和二級快取的支援
  7. 型別模組:提供別名機制,JDBC Type 和 Java Type 之間的轉換
  8. IO模組:提供資源載入功能
  9. 日誌模組:提供日誌輸出,支援整合第三方日誌框架
  10. 註解模組:提供相關注解
  11. Binding模組:提供 Mapper 介面與 XML 對映檔案進行關聯的支援

核心處理層

核心處理層,實現了 MyBatis 的核心處理流程,包括 MyBatis 的初始化以及完成一次資料庫操作的涉及的全部流程

介面層

介面層,核心為 SqlSession 介面,該介面定義了 MyBatis 暴露給應用程式呼叫的 API,也就是上層應用與 MyBatis 互動的橋樑。介面層在接收到呼叫請求時,會呼叫核心處理層的相應模組來完成具體的資料庫操作

總結

總的來說,MyBatis 的程式碼不多,比較簡單易懂,按照上面三個模組(基礎支援層 => 核心處理層 => 介面層)逐步進行分析,後續會提供一系列的文件,包含 MyBatis 與 Spring 和 Spring Boot 整合的原始碼解析,請熟讀 MyBatis 官方文件

參考文章:芋道原始碼《精盡 MyBatis 原始碼分析》

相關文章