作用域和生命周期是至关重要的,因为错误的使用会导致非常严重的并发问题,例如:每次执行完SQL不关闭sqlSession,会导致数据库连接池资源不够用
生命周期流程图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZRwkeIHM-1582464174306)(C:\Users\26311\AppData\Roaming\Typora\typora-user-images\image-20200215233327027.png)]
SqlSessionFactoryBuilder:
- 一旦创建了 SqlSessionFactory,就不再需要它了
- SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)
SqlSessionFactory:
- 说白了就是数据库连接池,没有任何理由丢弃它或重新创建另一个实例
- 一旦被创建就应该在应用的运行期间一直存在
- SqlSessionFactory 的最佳作用域是应用作用域(也就是全局变量)
SqlSession:
- 相当于一个连接数据库连接池的请求
- SqlSession 的实例不是线程安全的,因此是不能被共享的
- 用完之后要关闭,否则资源被占用