SqlSessionFactoryBuilder对象可以被JVM虚拟机所实例化、使用或者销毁。一旦你使用SqlSessionFactoryBuilder对象创建了SqlSessionFactory后,SqlSessionFactoryBuilder类就不需要存在了,也就是不需要保持此对象的状态,可以随意的任由JVM销毁,因此SqlSessionFactoryBuilder对象的最佳使用范围是方法之内,也就是说可以在方法内部声明SqlSessionFactoryBuilder对象来创建SqlSessionFactory对象。
SqlSessionFactory对象是由SqlSessionFactoryBuilder对象创建而来。一旦SqlSessionFactory类的实例被创建,该实例应该在应用程序执行期间都存在,根本不需要在每一次操作数据库时都重新创建它,所以应用它的最佳方式就是写一个单例模式,或使用Spring框架来实现单例模式对SqlSessionFactory对象进行有效的管理。
SqlSession对象是由SqlSessionFactory类创建,需要注意的是,每个线程都应该有它自己的SqlSession实例。
SqlSession的实例不能共享使用,因为它是线程不安全的,所以千万不要在Servlet中声明该对象的一个实例变量(可以声明在方法内部)。参看Servlet运行原理以及生命周期;
也绝不能将SqlSession对象放在一个类的静态字段甚至是实例字段中;还不可以将SqlSession对象放在HttpSession会话或ServletContext上下文中。在接收到HTTP请求时,可以打开一个SqlSession对象操作数据库,然后返回响应,就可以关闭它了。关闭SqlSession很重要,你应该确保使用finally块来关闭它,下面的示例就是一个确保SqlSession对象正常关闭的基本模块代码:
public class insertUserinfo extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
SqlSession sqlSession=GetSqlSession.getSqlSession();
try {
//sqlSession crud code
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
e.printStackTrace(s);
}finally {
sqlSession.close();
}
}
}