MyBatis-作用域和生命周期

MyBatis-作用域和生命周期,第1张

MyBatis-作用域和生命周期 本节博客主要讲解SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession的作用域和生命周期 1、SqlSessionFactoryBuilder

作用域:局部作用域

生命周期:用完即弃

这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但最好还是不要一直保留着它,以保证所有的 XML 解析资源可以被释放给更重要的事情。

2、SqlSessionFactory

作用域:应用作用域

生命周期:整个Application

SqlSessionFactory作为一个数据库连接池的作用是创建SqlSession接口对象。Mybatis其实是Java对数据库的 *** 作,所以SqlSessionFactory的生命周期存在于整个Mybatis程序中即整个Application,会长期保存,直至不再使用Mybatis。SqlSessionFactory在使用时占据着数据库的资源,如果创建多个就会导致数据库资源被耗光出现系统宕机等情况。最简单的方法是单例模式或者是静态单例模式。然 而这既不是广泛赞成和好用的。

3、SqlSession

作用域:请求和局部作用域

生命周期:处理完整个请求后,应该关闭这条连接

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

必须要确保SqlSession 在finally 方法体中正常关闭。可以使用下面的标准方式来关闭:

SqlSession session = sqlSessionFactory.openSession();
try {
// do work
} finally {
session.close();
}

图文理解

话不多说,让一心同学直接扔一张图上来理解三者之间的关系:

接下来我们再继续看SqlSessionFactory和SqlSession之间的关系:

到这里,相信就能够理清SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession之间的关系了。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5611956.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存