栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis-作用域和生命周期

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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之间的关系了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/605812.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号