MyBatis的生命周期


MyBatis的生命周期

  所謂的生命周期就是第一個對象應該存活的時間,比如一些對象一次用完后就要關閉,使它們被Java虛擬機(JVM)銷毀,以避免繼續占用資源,所以我們會根據每一個組件的作用去確定其生命。

(一)、SqlSessionFactoryBuilder

  SqlSessionFactoryBuilder的作用就是在於創建SqlSessionFactory,創建成功后,SqlSessionFactoryBuilder就失去了作用,所以它只能存在於創建SqlSessionFactory的方法中,而不要讓其長期存在。

(二)、SqlSessionFactory

  SqlSessionFactory可以被認為是一個數據庫連接池,它的作用是創建SqlSession接口對象。因為MyBatis的本質就是Java對數據庫的操作,所以SqlSessionFactory的生命周期在於於整個MyBatis的應用之中,所以一旦創建了SqlSessionFactory的生命周期就等同於MyBatis的應用周期。

  由於SqlSessionFactory是一個對數據庫的連接池,所以它占據着數據庫的連接資源。如果創建多個SqlSessionFactory,那么就存在多個數據庫連接池,這樣不利於對數據資源的控制,也會導致連接資源被消耗光,出現系統宕機等情況,所以盡量避免發生這樣的情況。因此在一般的應用中我們往往希望SqlSessionfactory作為一個單例,讓它在應用中補共享。

(三)、SqlSession

  如果說SqlSessionFactory相當於數據庫連接池,那么SqlSession就相當於一個數據庫連接(Connection對象),你可以在一個事務里面執行多條SQL,然后通過它的commit、rollback等方法,提交或者回滾事務。所以它應該存活在一個業務請求中,處理完整個請求后,應該關閉這條連接,讓它歸還給SqlSessionFactory,否則數據庫資源就很快被消耗精光,系統應付癱瘓,所以用try...catch...fanally語句來保證其正確關閉。

(四)、Mapper

  Mapper是一個接口,它由SqlSession所創建,所以它的最大生命周期至多和SqlSession保持一致,盡管它很好用,但是由於SqlSession關閉,它的數據庫連接資源也會消失,所以它的生命周期應該小於等於SqlSession的生命周期。Mapper代表是一個請求中的業務處理,所以它應該在一個請求中,一旦處理完了相關的業務,就應該廢棄它。

  MyBatis的生命周期圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM