Mybatis框架(七)Mybatis的生命周期

Mybatis的核心组件有SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper 。
Mybatis的运行流程:
在这里插入图片描述
SqlSessionFactoryBuilder

  • SqlSessionFactoryBuilder类可以被实例化、使用和丢弃,一旦创建了SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder实例的最佳作用域是方法作用域(也就是局部方法变量)。
  • SqlSessionFactoryBuilder的作用就是在于创建SqlSessionFactory,创建成功后,SqlSessionFactoryBuilder就失去了作用,所以它只能存在于创建SqlSessionFactory的方法中,而不要让其长期存在。

SqlSessionFactory

  • SqlSessionFactory可以被认为是一个数据库连接池,它的作用是创建SqlSession接口对象。因为MyBatis的本质就是Java对数据库的操作,所以SqlSessionFactory的生命周期是整个MyBatis的应用之中,所以一旦创建了SqlSessionFactory的生命周期就等同于MyBatis的应用周期
  • 最简单的就是使用 单例模式 或者静态单例模式。

SqlSession

  • 如果说SqlSessionFactory相当于数据库连接池,那么SqlSession就相当于一个数据库连接(Connection对象),你可以在一个事务里面执行多条SQL,然后通过它的commit、rollback等方法,提交或者回滚事务。所以它应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,让它归还给SqlSessionFactory,否则数据库资源就很快被消耗精光,系统应付瘫痪,所以用try…catch…fanally语句来保证其正确关闭。

  • 每个线程都应该有它自己的 SqlSession 实例。SqlSession
    的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域

Mapper

  • 映射器是一个你创建来绑定你映射的语句的接口。映射器接口的实例是从 SqlSession 中获得的。

  • 由于SqlSession关闭,它的数据库连接资源也会消失,所以它的生命周期应该小于等于SqlSession的生命周期。Mapper代表是一个请求中的业务处理,所以它应该在一个请求中,一旦处理完了相关的业务,就应该废弃它。
    在这里插入图片描述

发布了105 篇原创文章 · 获赞 30 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43759352/article/details/104555383