天天看點

MyBatis的生命周期

    在web應用中如果不了解mybatis元件的生命周期可能帶來很嚴重的并發問題,下面總結下SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession和Mapper的生命周期。

MyBatis核心元件:

  1. SqlSessionFactoryBuilder
  2. SqlSessionFactory
  3. SqlSession
  4. Mapper     

一:SqlSessionFactoryBuilder

       SqlSessionFactoryBuilder是利用XML或者java編碼獲得資源來建構SqlSessionFactory的,通過它可以建構多個SessionFatory。它的作用就是一個建構器,一旦我們建構了SqlSessionFactory,它的作用就已經完結,失去了存在的意義,這時我們就應該廢棄它,将他回收。是以它的生命周期隻存在于方法的局部,它的作用就是生成SqlSessionFactory對象

二:SqlSessionFactory

     SqlSessionFactory的作用是建立SqlSession,而SqlSession就是一個會話,相當于jdbc中的Connection對象。每次應用程式需要通路資料庫,我們就要通過SqlSessionFactory建立SqlSession,是以SqlSessionFactory應該在Mybatis應用的整個生命周期中。而如果我們多次建立同一個資料庫的SqlSessionFactory,則每次建立SqlSessionFactory會打開更多的資料庫連接配接資源,那麼連接配接資源就會很快被耗盡。是以SqlSessionFactory的責任是唯一的,它的責任就是建立SqlSession,是以我們應該采用單例模式。每個資料庫隻對應一個SqlSessionFactory,管理資料庫資源的配置設定,避免過多的Connection被消耗。

三:SqlSession

     SqlSession是一個會話,相當于jdbc的Connection對象,它的生命周期應該是在請求資料庫處理事務的過程中。它是一個線程不安全的對象,在涉及多線程的時候我們需要特别的擔心,操作資料庫需要注意隔離級别,資料庫鎖等進階特性。此外,每次建立的SqlSession都必須及時關閉它,它長期存在就會使資料庫連接配接池的活動資源減少,對系統性能的影響很大。SqlSession存活于一個應用的請求和操作,可以執行多條sql,保證事務的一緻性。

四:Mapper

    Mapper是一個接口,而沒有實作類,它的作用是發送sql然後傳回我們需要的結果,或者執行sql進而修改資料庫的資料,是以它應該在一個SqlSession事務方法之内,是一個方法級别的東西。如同jdbc中的一條sql語句執行,它的最大範圍和SqlSession是相同的。盡管我們想一直儲存着Mapper,但是你會發現很難控制,是以盡量在一個SqlSession事務的方法中使用它們,然後廢棄掉。

Reference:https://blog.csdn.net/j903829182/article/details/71935048

繼續閱讀