1. 程式人生 > >【轉載】關於SqlSessionFactoryBuilder SqlSessionFactory SqlSession的作用範圍

【轉載】關於SqlSessionFactoryBuilder SqlSessionFactory SqlSession的作用範圍

google erl pre 依賴 最簡 tor 單例 重新 web框架

1 SqlSessionFactoryBuilder:這個類可以被實例化,使用和丟棄。一旦你創建了SqlSessionFactory後,這個類就不需要存在了。因此SqlSessionFactoryBuilder實例的最佳範圍是方法範圍(也就是本地方法變量)。你可以重用SqlSessionFactoryBuilder來創建多個SqlSessionFactory實例,但是最好的方式是不需要保持它一直存在來保證所有XML解析資源,因為還有更重要的事情要做。
2 
3 SqlSessionFactory:一旦被創建,SqlSessionFactory應該在你的應用執行期間都存在。沒有理由來處理或重新創建它。使用SqlSessionFactory的最佳實踐是在應用運行期間不要重復創建多次。這樣的操作將被視為是非常糟糕的。因此SqlSessionFactory的最佳範圍是應用範圍。有很多方法可以做到,最簡單的就是使用單例模式或者靜態單例模式。然而這兩種方法都不認為是最佳實踐。這樣的話,你可以考慮依賴註入容器,比如Google Guice或Spring。這樣的框架允許你創建支持程序來管理單例SqlSessionFactory的生命周期。 
4 5 SqlSession:每個線程都應該有它自己的SqlSession實例。SqlSession的實例不能被共享,也是線程不安全的。因此最佳的範圍是請求或方法範圍。絕對不能將SqlSession實例的引用放在一個類的靜態字段甚至是實例字段中。也絕不能將SqlSession實例的引用放在任何類型的管理範圍中,比如Serlvet架構中的HttpSession。如果你現在正用任意的Web框架,要考慮SqlSession放在一個和HTTP請求對象相似的範圍內。換句話說,基於收到的HTTP請求,你可以打開了一個SqlSession,然後返回響應,就可以關閉它了。關閉Session很重要,你應該確保使用finally塊來關閉它。

【轉載】關於SqlSessionFactoryBuilder SqlSessionFactory SqlSession的作用範圍