MyBatis 生命周期和作用域

在 MyBatis 中,SqlSessionFactoryBuilder、SqlSessionFactory 和 SqlSession 的生命周期和作用域至关重要,错误的使用将导致并发问题。

一、执行流程

  • 实例化 SqlSessionFactoryBuilder
  • 使用 SqlSessionFactoryBuilder 创建 SqlSessionFactory 实例
  • 通过 SqlSessionFactory 实例获取 SqlSession 实例

二、SqlSessionFactoryBuilder

一旦被调用以创建 SqlSessionFactory 之后,便不再被需要。

正确做法是:使作用域为局部,用完即弃。

三、SqlSessionFactory

一旦创建就应该一直存在,不应丢弃或重新创建。

正确做法是:使作用域为全局,并且使用单例模式或静态单例模式。

四、SqlSession

SqlSession 并不是线程安全的,不能被共享,因此每个线程都应该有一个 SqlSession 实例。并且,SqlSession 实例应该及时关闭,以避免资源占用。

正确做法是:每次重新打开一个 SqlSession 实例,用完之后立马进行关闭。

参考