mybatis-生命周期和作用域
讨论 SqlSessionFactoryBuilder SqlSessionFactory SqlSession 的生命周期和作用域
生命周期:
SqlSessionFactoryBuilder :为了创建 SqlSessionFacrot y而生,创建完成后就失去作用,此时应该销毁.
SqlSessionFactory :相当于是一个数据库的连接池,为了创建 sqlSession 接口对象而存在,而 Mybatais 的作用就是操作数据库,所以 SqlSessionFactory 的生命周期与 Mybatis 应用周期相同,并 SqlSessionFactory 作为一个数据库连接池,为利于对数据库资源的控制和避免数据库连接资源的浪费,我们往往希望 SqlSessionFactory 作为一个单例,让它在应用中被共享.
SqlSession 相当于是一个数据库连接(Connection对象),存活于一个业务中,当业务开始之前被创建,业务操作完成后被关闭,将连接归还于 SqlSessionFactory ,防止数据库资源被消耗,所以使用 try...catch...finally... 语句来保证其正确关闭.
最佳作用域:
SqlSessionFactoryBuilder : 方法作用域(方法局部变量)
SqlSessionFactory : 应用作用域
SqlSession : 请求或方法作用域
流程图: