6.生命周期和作用域
理解我们之前讨论过的不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的
并发问题
并发问题的产生:获取到连接不关闭
1.SqlSessionFactoryBuilder
1.1一旦创建了SqlSessionFactory,就不再需要它了
1.2局部变量
2.SqlSessionFactory
2.1说白了就是可以想象成:数据库连接池
2.2SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何丢其他或者重新创建另外一个实例
2.3因此SqlSessionFactory的最佳作用域是应用作用域
2.4最简单的就是单例模式或者静态单例模式
3.SqlSesion
3.1连接到连接池的一个请求
3.2SqlSession的示例不是线程安全的。因此不能被共享的,所以它的最佳作用域是请求或者方法作用域
3.3用完之后赶紧关闭,负责资源会被占用
所以按照上述可以编写自定义的mybatis工具类:
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getsSqlSession(){
return sqlSessionFactory.openSession();
}
}