Mybatis源碼剖析 -- 架構(gòu)原理

一、架構(gòu)設(shè)計

Mybatis 的功能架構(gòu)分為三層

  1. API 接口層
    提供給外部使用的接口 API,開發(fā)人員通過這些本地 API 來操作數(shù)據(jù)庫。接口層?接收
    到調(diào)用請求就會調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理
    MyBatis 和數(shù)據(jù)庫的交互有兩種方式
    • 使用傳統(tǒng)的 MyBatis 提供的API
    • 使用 Mapper 代理的方式
  2. 數(shù)據(jù)處理層
    負責(zé)具體的 SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。它主要的目的是根據(jù)調(diào)用的請求完成?次數(shù)據(jù)庫操作
  3. 基礎(chǔ)支撐層
    負責(zé)最基礎(chǔ)的功能支撐,包括連接管理、事務(wù)管理、配置加載和緩存處理,這些都是
    共用的東西,將他們抽取出來作為最基礎(chǔ)的組件。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐


二、主要構(gòu)件及其相互關(guān)系

構(gòu)件 描述
SqlSession 作為 MyBatis 工作的主要頂層API,表示和數(shù)據(jù)庫交互的會話,完成必要數(shù)據(jù)庫增刪改查功能
Executor MyBatis執(zhí)行器,是 MyBatis 調(diào)度的核心,負責(zé)SQL語句的生成和查詢緩存的維護
StatementHandler 封裝了 JDBC Statement 操作,負責(zé)對 JDBC statement 的操作,如設(shè)置參數(shù)、將 Statement 結(jié)果集轉(zhuǎn)換成 List 集合
ParameterHandler 負責(zé)對用戶傳遞的參數(shù)轉(zhuǎn)換成 JDBC Statement 所需要的參數(shù)
ResultSetHandler 負責(zé)將 JDBC 返回的 ResultSet 結(jié)果集對象轉(zhuǎn)換成 List 類型的集合
TypeHandler 負責(zé) java 數(shù)據(jù)類型和 JDBC 數(shù)據(jù)類型之間的映射和轉(zhuǎn)換
MappedStatement MappedStatement 維護了?條<select | update | delete | insert>節(jié)點的封裝
SqlSource 負責(zé)根據(jù)用戶傳遞的 parameterObject,動態(tài)地生成SQL語句,將信息封裝到 BoundSql 對象中,并返回
BoundSql 表示動態(tài)生成的SQL語句以及相應(yīng)的參數(shù)信息

三、總體流程

  1. 加載配置并初始化,將核心配置文件內(nèi)容解析封裝到 Configuration,將 SQL 的配置信息加載成為?個 mappedStatement 對象,存儲在內(nèi)存之中
    • 觸發(fā)條件:加載配文件
    • 配置來源于兩個地方:
      ① 配置文件(核心配置文件conf.xml,mapper文件*.xml)
      ② java 代碼中的注解
  2. 接收調(diào)用請求
    • 觸發(fā)條件:調(diào)用 Mybatis 提供的API
    • 傳入?yún)?shù):為 SQL 的 ID 和傳入?yún)?shù)對象
    • 處理過程:將請求傳遞給下層的請求處理層進行處理
  3. 處理操作請求
    • 觸發(fā)條件:API接口層傳遞請求過來
    • 傳入?yún)?shù):為 SQL 的 ID 和傳入?yún)?shù)對象
    • 處理過程:
      ① 根據(jù) SQL 的 ID 查找對應(yīng)的 MappedStatement 對象
      ② 根據(jù)傳入?yún)?shù)對象解析 MappedStatement 對象,得到最終要執(zhí)行的 SQL 和執(zhí)行傳入?yún)?shù)
      ③ 獲取數(shù)據(jù)庫連接,根據(jù)得到的最終 SQL 語句和執(zhí)行傳入?yún)?shù)到數(shù)據(jù)庫執(zhí)行,并得到執(zhí)行結(jié)果
      ④ 根據(jù) MappedStatement 對象中的結(jié)果映射配置對得到的執(zhí)行結(jié)果進行轉(zhuǎn)換處理,并得到最終的處理結(jié)果
      ⑤ 釋放連接資源
  4. 返回處理結(jié)果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容