手寫Mybatis(二)

手寫Mybatis(二)

一中講述了,編寫Mybatis的需求以及思路,這一篇我們來聊一下Mybatis的內容。

一、Mybatis架構圖

在這裏插入圖片描述

  • 接口層
    接口層是MyBatis提供給開發人員的一套API,主要使用SqlSession接口。通過SqlSession接口和Mapper 接口,開發人員可以通知MyBatis框架調用那一條SQL命令以及SQL命令關聯參數。
  • 數據處理層
    數據處理層是MyBatis框架內部的核心實現。來完成對映射文件的解析與數據處理,包括:
    1. 參數解析與參數綁定
    2. SQL解析
    3. 結果集映射解析與結果集映射處理
  • 支撐層
    支撐層用來完成MyBaits與數據庫基本連接方式以及SQL命令與配置文件對應。包括:
    1. MyBatis與數據庫連接方式管理
    2. MyBatis對事務管理方式
    3. 配置文件加載
    4. MyBatis查詢緩存管理

二、Mybatis架構流程圖

在這裏插入圖片描述

  • mybatis配置文件 SqlMapConfig.xml
    - 此文件作爲mybatis的全局配置文件,配置了mybatis的運行環境等信息。
    - Mapper.xml,此文件作爲mybatis的sql映射文件,文件中配置了操作數據庫的sql語句。此文件需要在SqlMapConfig.xml中加載。
  • SqlSessionFactory
    通過mybatis環境等配置信息構造SqlSessionFactory,即會話工廠。
  • sqlSession
    通過會話工廠創建sqlSession即會話,程序員通過sqlsession會話接口對數據庫進行增刪改查操作。
  • Executor執行器
    mybatis底層自定義了Executor執行器接口來具體操作數據庫,Executor接口有兩個實現,一個是 基本執行器(默認)、一個是緩存執行器,sqlsession底層是通過executor接口操作數據庫的。
  • Mapped Statement
    它也是Mybatis一個底層封裝對象,它包裝了Mybatis配置信息及sql映射信息等。Mapper.xml文件中一個select\insert\update\delete標籤對應一個Mapped Statement對象,select\insert\update\delete標籤的id即是Mapped Statement的id。
    1. Mapped Statement對sql執行輸入參數進行定義,包括HashMap、基本類型、pojo,Executor通過Mapped Statement在執行sql前將輸入的java對象映射至sql中,輸入參數映射就是jdbc編程中對preparedStatement設置參數。
    2. Mapped Statement對sql執行輸出結果進行定義,包括HashMap、基本類型、pojo,Executor通 過Mapped Statement在執行sql後將輸出結果映射至java對象中,輸出結果映射過程相當於jdbc 編程中對結果的解析處理過程。

三、Mybatis調用流程圖

在這裏插入圖片描述

  • SqlSession
    接收開發人員提供Statement Id 和參數.並返回操作結果
  • Executor
    MyBatis執行器,是MyBatis 調度的核心,負責SQL語句的生成和查詢緩存的維護
  • StatementHandler
    封裝了JDBC Statement操作,負責對JDBC statement 的操作,如設置參數、將Statement結果集轉換 成List集合。
  • ParameterHandler
    負責對用戶傳遞的參數轉換成JDBC Statement 所需要的參數
  • ResultSetHandler
    負責將JDBC返回的ResultSet結果集對象轉換成List類型的集合
  • TypeHandler
    負責java數據類型和jdbc數據類型之間的映射和轉換
  • MappedStatement
    維護了一條<select|update|delete|insert>節點的封裝
  • SqlSource
    負責根據用戶傳遞的parameterObject,動態地生成SQL語句,將信息封裝到BoundSql對象中,並返 回BoundSql表示動態生成的SQL語句以及相應的參數信息
  • Configuration
    MyBatis所有的配置信息都維持在Configuration對象之中。

最後拓展一張Mapper代理執行原理圖:
在這裏插入圖片描述

總結

要想寫一個簡易的Mybatis,那麼就要了解Mybatis的架構、架構流程以及調用流程,這樣在寫代碼的過程中不至於找不到入手點和連接關係,至於再細的內容就需要在代碼中體現了。


青春短暫,我在路上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章