MyBatis中的作用域和生命週期
阿新 • • 發佈:2019-02-13
SqlSessionFactoryBuilder
這個類可以被例項化,使用和丟棄,一旦建立了SqlSessionFactory,就不再需要它,因此SqlSessionFactoryBuilder例項的最佳作用域是方法作用域(也就是區域性方法變數)。可以重用SqlSessionFactoryBuilder來建立多個SqlSessionFactory例項,但是最好還是不要讓其一直存在以保證所有的XML解析資源開放給更重要的事情。
SqlSessionFactory
SqlSessionFactory一旦被建立就應該在應用的執行期間一直存在,沒有任何理由對它進行清除或重建。使用SqlSessionFactory的最佳實踐是在應用執行期間不要重複建立多次,多次重建SqlSessionFactory被視為一種程式碼“壞味道”。因此SqlSessionFactory的最佳作用域是應用作用域
SqlSession
每個執行緒都應該有它自己的SqlSession例項。SqlSession的例項不是執行緒安全的因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。絕對不能將SqlSession例項的引用放在一個類的靜態域,甚至一個類的例項變數也不行。也絕不能將SqlSession例項的引用放在任何型別的管理作用域中,比如Servlet架構中的HttpSession。如果現在正在使用一種Web架構,要考慮SqlSession放在一個和HTTP請求物件相似的作用域中,換句話說,每次收到的HTTP請求,就可以開啟一個SqlSession,返回一個響應,就關閉它。這個關閉操作是很重要的,應該把這個關閉操作放到finally塊中以確保每次都能執行關閉。