1. 程式人生 > >MyBatis的核心元件和生命週期

MyBatis的核心元件和生命週期

1 核心元件:
(1)、SqlSessionFactoryBuilder(構造器):它會根據配置或者程式碼來生成SqlSessionFactory,採用的是分佈構建的Builder模式。
(2)、SqlSessionFactory(工廠介面):依靠它來生成SqlSession,使用的是工廠模式。
(3)、SqlSession(會話):一個既可以傳送SQL執行返回結果,也可以獲取Mapper的介面。
(4)、SQL Mapper(對映器):MyBatis新設計存在的元件,它由一個Java介面和XML檔案(或註解)構成,需要給對應的SQL和對映規則。它負責傳送SQL去執行,並返回結果。
備註:無論是對映器還是SqlSession都可以傳送SQL到資料庫執行。


2 SqlSessionFactory 說明
(1) 使用MyBatis首先是使用配置或者程式碼去生產SqlSessionFactory,而MyBatis提供了構造器SqlSessionFactoryBuilder。它提供了一個類
org.apache.ibatis.Configuration作為引導,採用的是Builder模式。具體的分佈在Configuration類裡面完成的。
(2) 生成:SqlSessionFactory有兩種方式:
        1、通過讀取配置XML檔案的形式生成。
        2、通過Java程式碼的方式生成。
(3)XML構建SqlSessionFactory:在mybatis-config.xml裡面配置相關資訊(怎麼配置這裡不再贅述),

       然後通過SqlSessionFactoryBuilder的Builder方法建立SqlSessionFactory。
       使用程式碼建立SqlSessionFactory:略(由於不常用,這裡直接忽略,想研究的可以檢視相關文件)。
(4) SqlSessionFactory是一個介面 它的實現類:
    SqlSessionManager:使用多執行緒的環境中,它的具體實現依靠DefaultSessionFactory。
    DefaultSessionFactory:具體都是靠它來實現。
(5) 作用:MyBatis的應用都是以一個SqlSessionFactory的例項為中心的,它的唯一作用是生產MyBatis的核心介面物件SqlSession。使用單例模式來處理它。

3 SqlSession
在MyBatis中,SqlSession是其核心的介面。在MyBatis中有兩個實現類,DefaultSqlSession和SqlSessionManager。
DefaultSqlSession是單執行緒使用的,而SqlSessionManager在多執行緒環境下使用。
作用:它相當於JDBC中的Connection物件,代表著一個連線資源的啟用
  (1)獲取Mapper介面
  (2)傳送SQL給資料庫
  (3)控制資料庫事務

4 對映器
對映器是MyBatis中最重要、最複雜的元件,它由一個介面和對應的XML檔案(或註解)組成。
它可以配置以下內容:
    1、描述對映規則。
    2、提供SQL語句,並可以配置SQL引數型別、返回型別、快取重新整理等資訊。
    3、配置快取。
    4、提供動態SQL。
作用:就是將SQL查詢到的結果對映為一個POJO,或者將POJO的資料插入到資料庫中,並定義一些關於快取等重要內容。
備註:MyBatis運用了動態代理的方式使得介面能執行起來。

5 生命週期:

(1)、SqlSessionFactoryBuilder作用是建立SqlSessionFactory,建立成功後,它就失去了作用。所以它只存在建立SqlSessionFactory中。
(2)、SqlSessionFactory它可以被認為是一個數據庫連線池,它的作用是建立SqlSession介面物件。所以它的生命週期存在於整個MyBatis的應用之中,所以一旦被建立了,就要長期儲存它,知道不再使用MyBatis應用。
(3)、SqlSession相當於一個數據庫的連線(Connection物件),你可以在一個事務裡面執行多條SQL,然後通過它的commit、rollback等方法,提交或者回滾事務。所以它存活在一個業務請求中,處理完整個請求後,應該關閉連線歸還給連線池。
(4)、Mapper它是一個介面,它由SqlSession建立,所以它的生命週期小於等於SqlSession,因為它由SqlSession關閉。