【Mybatis】- 框架架構

Mybatis怎麼理解

借用官網的介紹:java

MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.程序員

總的來講能夠分爲三部分sql

  1. 是一個支持自定義SQL,存儲過程和高級映射的持久性框架;
  2. 幾乎消除了全部JDBC代碼和手動設置參數以及檢索結果。
  3. 可使用簡單的XML或Annotations來配置和映射基元,Map接口和Java POJO(Plain Old Java Objects)到數據庫記錄

框架

      

這是Mybatis最經典的架構圖,如何理解這幅圖呢?數據庫

  1. 首先映入眼簾的是紅色的Configuration對象,這個對象是將mybatis配置文件,mapper文件,以及java代碼註解封裝成了一個總體。
  2. 而後會和mapper接口進行關聯;
  3. 接着當mapper接口接受到調用請求,會接收到傳入SQL的ID和傳入對象(也就是左邊的三個「輪子」),mybatis會根據sql的id找到對應的MapperStatement(一個sql就是一個statement)並進行解析,解析後獲得最終要執行的sql。 經過mapper Statements進行操做
  4. 而後將獲得的sql和參數拿到數據庫去執行,獲得最終的結果,而後將獲得的結果按映射的配置,轉換爲右邊的三個「輪子」,輸出。

具體執行過程

  1. 首先咱們須要Mybatis的全局配置文件sqlMapConfig.xml以及映射文件Mapper.xml,這兩類文件在程序初始化時會讀取到框架圖中的Configuration對象中,進行封裝處理。
  2. 而後會經過Configuration對象來建立SqlSessionFactory回話工廠;
  3. 接着經過SqlSessionFactory回話工廠建立sqlSession。sqlSession是面向程序員的接口,程序員能夠經過sqlSession操做數據庫。
  4. 而後調用sqlSession的方法去操做數據庫,若是須要提交事務,須要執行sqlSession的commit()方法;

對sqlSession的理解

上邊的執行過程,能夠抽象成這幅圖,這幅圖看起來就簡介不少。咱們能夠看到,以sqlSession爲界,分爲了兩部分:mybatis

  1. 從Configuration到SqlSession能夠成爲操做手冊或者配置,控制着mybatis的初始化,以及sqlSession的走向;
  2. 從SqlSession到DB能夠成爲操做DB部分,這部分是如何操做數據庫,以及對jdbc的封裝處理。
  3. 因此,SqlSession能夠理解爲一個承上啓下的功能,對上是如何建立sqlSession並指導SqlSession如何操做,對下是SqlSession的具體操做。

sqlSession承上啓下的做用,咱們能夠經過代碼來瞅瞅:架構

sqlSession類裏注入了兩個對象,一個是configuration,一個是executor。爲何要注入這兩個對象呢?由於configuration包含全部配置,能夠指導sqlSession的執行過程,而executor能夠代替sqlSession來執行sql。app

因此上一幅圖還能夠抽象成這樣:框架

如何有這幅圖來理解mybatis的運做流程呢?只須要解決下面三個問題便可:學習

  1. sqlSession是如何產生的?以及xml是怎麼對應到configuration的?sqlSession如何獲取
  2. mapper接口和maper.xml是怎麼映射起來的?mapper接口和mapper文件如何映射
  3. mapper接口是如何操做數據庫的?mapper接口如何操做數據庫

結語

對於mybatis的理解,最後咱們能夠濃縮爲這樣一幅圖。看書的時候,咱們常常說,一本書從厚看薄了,再從薄看厚了,就是真的領悟。學習框架也是同樣,從一個完整的框架濃縮爲一張簡單的uml圖,再從一張簡單的uml圖擴展爲完整的框架,那麼咱們就真的掌握了這個框架。.net