Mybatis架構與原理

1、簡介

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

Mybatis能夠將Sql語句配置在XML文件中,避免將Sql語句硬編碼在Java類中。與JDBC相比:數據庫

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

2、架構

咱們把Mybatis的功能架構分爲三層:緩存

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

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

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

 

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對象之中

4、核心類

一、SqlSessionFactoryBuilder

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

它的做用是經過XML配置文件建立Configuration對象(固然也能夠在程序中自行建立),而後經過build方法建立SqlSessionFactory對象。沒有必要每次訪問Mybatis就建立一次SqlSessionFactoryBuilder,一般的作法是建立一個全局的對象就能夠了框架

二、SqlSessionFactory

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

三、SqlSession

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

四、Executor

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

五、StatementHandler

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

六、ResultSetHandler

處理查詢結果。

相關文章
相關標籤/搜索