在以前的章節中咱們講了Mybatis一些主要組件的基本用法和配置方式,可是掌握這些主要組件的生命週期也是很是重要的,不能只是單單瞭解基本的使用方法。這對於MyBatis應⽤的正確性和高性能是極其重要的,咱們必須掌握他們java
本單主要內容:sql
如下各組件的生命週期理解:數據庫
SqlSessionFactoryBuilder是利用XML或者Java編碼得到資源來構建SqlSessionFactory
的,經過它能夠構建多個SessionFactory。它的做⽤用就是一個構建器一旦咱們構建了SqlSessionFactory 它的做用就⼰經完結
,失去了存在的意義,這時咱們就應該毫不猶豫的廢棄它,將它回收。安全
因此它的⽣命週期只存在於⽅法的局部,它的做用就是⽣成SqlSessionFactory對象
session
SqlSessionFactory的做用是建立SqlSession,而SqlSession就是一個會話,至關於JDBC
中的Connection對象。每次應用程序須要訪問數據庫,咱們就要經過SqlSessionFactory創
建SqlSession,因此SqlSessionFactory應該在MyBatis應用的整個⽣命週期中
。而若是咱們
屢次建立同一個數據庫的SqlSessionFactory,則每次建立SqlSessionFactory會打開更更多的數
據庫鏈接(Connection)資源,那麼鏈接資源就很快會被耗盡(這就很嚴重!)mybatis
所以SqlSessionLFactory的責任是惟一的,它的責任就是建立SqlSession,因此咱們果斷採用單例模式。若是咱們採用多例,那麼它對數據庫鏈接的消耗是很大的,不利於咱們統⼀的管理,因此正確的作法應該是使得每⼀個數據庫只對應一個SqlSessionFactory,管理好
數據庫資源的分配,避免過多的Connection被佔用,致使數據庫鏈接被佔滿.多線程
SqlSession是⼀個會話,至關於JDBC的一個Connection對象,它的⽣命週期應該是
在請求數據庫處理事務的過程當中
app
它是一個線程不安全的對象,在涉及多線程的時候咱們
須要特別的小心,操做數據庫須要注意其隔離級別,數據庫鎖等⾼級特性。此外,每次創
建的SqlSession都必須及時關閉它,它長期存在就會使數據庫鏈接池的活動資源減小,對
系統性能的影響很大。正如Mybatis源碼閱讀(一)中的代碼⼀樣,咱們每每經過finally語句塊保證咱們正確
的關閉了SqlSession性能
Mapper是個接⼝,⽽沒有任何實現類,它的做⽤是發送SQL,而後返回咱們須要的結果 所以它的生命週期應該在⼀個SqlSession事務⽅法以內
,它的最大範圍和SqlSession是相同的ui
有了上面的敘述後,咱們已經清楚了 Mybatis各組件的生命週期和聯繫:
關注公衆號:java寶典