MyBatis核心元件如下:
-
:它會根據配置資訊或者代碼來生成SqlSessionFactoryBuilder(構造器)
SqlSessionFactory(工廠接口)
-
:依靠工廠來生成SqlSessionFactory
SqlSession(會話)
-
:是一個既可以發送SQL去執行并傳回結果,也可以擷取SqlSession
的接口Mapper
-
:它是由一個Java接口和XML檔案(或注解)構成的,需要給出對應的SQL和映射規則。它負責發送SQL去執行,并傳回結果SQL Mapper
1、SqlSessionFactoryBuilder
SqlSessionFactoryBuilder是利用XML或者Java編碼獲得資源來建構SqlSessionFactory的,通過它可以建構多個SessionFactory。它的作用就是一個構造器,一旦建構了SqlSessionFactory,它的作用就已經完結,這時就可以将它回收。是以它的生命周期隻存在于方法的局部,它的作用就是生成SqlSessionFactory對象
2、SqlSessionFactory
SqlSessionFactory的作用是建立SqlSession,而SqlSession就是一個會話,相當于JDBC中的Connection對象。每次應用程式需要通路資料庫,就要通過SqlSessionFactory建立SqlSession,是以SqlSessionFactory應該在MyBatis應用的整個生命周期中。而如果多次建立同一個資料庫的SqlSessionFactory,則每次建立SqlSessionFactory會打開更多的資料庫連接配接資源,那麼連接配接資源就很快會被耗盡。是以SqlSessionFactory的責任是唯一的,它的責任就是建立SqlSession,是以應該采用單例模式。正确的做法應該是使得每一個資料庫隻對應一個SqlSessionFactory,管理好資料庫資源的配置設定,避免過多的Connection被消耗
3、SqlSession
SqlSession是一個會話,相當于JDBC的一個Connection對象,它的生命周期應該是在請求資料庫處理事務的過程中。它是一個線程不安全的對象,操作資料庫需要注意其隔離級别和資料庫鎖等特性。此外,每次建立的SqlSession都必須及時關閉它,它長期存在就會使資料庫連接配接池的活動資源減少,對系統性能的影響很大。它存活于一個應用的請求和操作,可以執行多條SQL,保證事務的一緻性
4、Mapper
Mapper是一個接口,它的作用就是發送SQL,然後傳回結果,或者執行SQL進而修改資料庫的資料,是以它應該在一個SqlSession事務方法之内,是一個方法級别的東西。它就如同JDBC中的一條SQL語句的執行,它最大的範圍和SqlSession是相同的