Mybatis架構與原理


一、簡介

MyBatis 是一款優秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集

Mybatis可以將Sql語句配置在XML文件中,避免將Sql語句硬編碼在Java類中。與JDBC相比:

  1. Mybatis通過參數映射方式,可以將參數靈活的配置在SQL語句中的配置文件中,避免在Java類中配置參數(JDBC)
  2. Mybatis通過輸出映射機制,將結果集的檢索自動映射成相應的Java對象,避免對結果集手工檢索(JDBC)
  3. Mybatis可以通過Xml配置文件對數據庫連接進行管理。

二、架構

我們把Mybatis的功能架構分為三層:

(1)API接口層:提供給外部使用的接口API,開發人員通過這些本地API來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。

(2)數據處理層:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操作。

(3)基礎支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作為最基礎的組件。為上層的數據處理層提供最基礎的支撐。

 

三、層次結構

  • SqlSession 作為MyBatis工作的主要頂層API,表示和數據庫交互的會話,完成必要數據庫增刪改查功能
  • Executor MyBatis執行器,是MyBatis 調度的核心,負責SQL語句的生成和查詢緩存的維護
  • StatementHandler 封裝了JDBC Statement操作,負責對JDBCstatement的操作,如設置參數、將Statement結果集轉換成List集合。
  • ParameterHandler 負責對用戶傳遞的參數轉換成JDBC Statement 所需要的參數
  • ResultSetHandler *負責將JDBC返回的ResultSet結果集對象轉換成List類型的集合;
  • TypeHandler 負責java數據類型和jdbc數據類型之間的映射和轉換
  • MappedStatement MappedStatement維護了一條<select|update|delete|insert>節點的封
  • SqlSource 負責根據用戶傳遞的parameterObject,動態地生成SQL語句,將信息封裝到BoundSql對象中,並返回
  • BoundSql 表示動態生成的SQL語句以及相應的參數信息
  • Configuration MyBatis所有的配置信息都維持在Configuration對象之中

四、核心類

1、SqlSessionFactoryBuilder

每一個MyBatis的應用程序的入口是SqlSessionFactoryBuilder。

它的作用是通過XML配置文件創建Configuration對象(當然也可以在程序中自行創建),然后通過build方法創建SqlSessionFactory對象。沒有必要每次訪問Mybatis就創建一次SqlSessionFactoryBuilder,通常的做法是創建一個全局的對象就可以了

2、SqlSessionFactory

由SqlSessionFactoryBuilder創建
它的主要功能是創建SqlSession對象,和SqlSessionFactoryBuilder對象一樣,沒有必要每次訪問Mybatis就創建一次SqlSessionFactory,通常的做法是創建一個全局的對象就可以了。SqlSessionFactory對象一個必要的屬性是Configuration對象,它是保存Mybatis全局配置的一個配置對象,通常由SqlSessionFactoryBuilder從XML配置文件創建

3、SqlSession

SqlSession對象的主要功能是完成一次數據庫的訪問和結果的映射,它類似於數據庫的session概念,由於不是線程安全的,所以SqlSession對象的作用域需限制方法內。SqlSession的默認實現類是DefaultSqlSession,它有兩個必須配置的屬性:Configuration和Executor。Configuration前文已經描述這里不再多說。SqlSession對數據庫的操作都是通過Executor來完成的

4、Executor

Executor對象在創建Configuration對象的時候創建,並且緩存在Configuration對象里。Executor對象的主要功能是調用StatementHandler訪問數據庫,並將查詢結果存入緩存中(如果配置了緩存的話)。

5、StatementHandler

StatementHandler是真正訪問數據庫的地方,並調用ResultSetHandler處理查詢結果。

6、ResultSetHandler

處理查詢結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM