SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession作用域和生命週期


生命週期和作用域

作用域理解

SqlSessionFactoryBuilder

sqlsessionFactoryBuilder的作用在於創建SqlSessionFactory,創建成功後,SqlSessionFactoryBuilder就失去了作用,所以它只能存在於創建SqlsessionFactory的方法中,而不要讓它長期存在。因此SqlSessionFactoryBuilder實例的最佳作用域是方法作用域,也就是局部方法變量。

SqlSessionFactory

SqlSessionFactory可以被認爲是一個數據庫連接池,它的作用是創建SqlSession接口對象。因爲MyBatis的本質就是java對數據庫的操作,所以SqlSessionFactory的生命週期存在於整個MyBatis的應用之中,所以一旦創建了SqlSessionFactory,就要長期保存它,直至不再使用MyBatis應用,所以可以認爲SqlSessionFactory的生命週期就等同於Mybatis的應用週期。

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

SqlSession

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章