MyBatis 生命周期和作用域
在 MyBatis 中,SqlSessionFactoryBuilder、SqlSessionFactory 和 SqlSession 的生命周期和作用域至关重要,错误的使用将导致并发问题。
一、执行流程
- 实例化 SqlSessionFactoryBuilder
- 使用 SqlSessionFactoryBuilder 创建 SqlSessionFactory 实例
- 通过 SqlSessionFactory 实例获取 SqlSession 实例
二、SqlSessionFactoryBuilder
一旦被调用以创建 SqlSessionFactory 之后,便不再被需要。
正确做法是:使作用域为局部,用完即弃。
三、SqlSessionFactory
一旦创建就应该一直存在,不应丢弃或重新创建。
正确做法是:使作用域为全局,并且使用单例模式或静态单例模式。
四、SqlSession
SqlSession 并不是线程安全的,不能被共享,因此每个线程都应该有一个 SqlSession 实例。并且,SqlSession 实例应该及时关闭,以避免资源占用。
正确做法是:每次重新打开一个 SqlSession 实例,用完之后立马进行关闭。