Mybatis核心组件作用域与生命周期

Mybatis核心组件作用域与生命周期

所谓生命周期就是每一个对象应该存活的时间,有些对象用完一次后就不再使用,这时就要对这些对象进行GC处理,以免继续占用资源,所以我们会根据Mybatis中每个组件的作用去确定其生命周期

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder的作用在于创建SqlSessionFactory,创建后,SqlSessionFactoryBuilder就完成了使命,失去了作用;因此它适合存在于创建SqlSessionFactory的方法中,不宜长期存在。SqlSessionFactoryBuilder实例最适合的作用域是方法作用域(方法的局部变量)。

SqlSessionFactory

SqlSessionFactory可以认为是一个数据库连接池,它的作用是创建SqlSession接口对象。因为Mybatis的本质就是Java对数据库的操作,所以SqlSessionFactory的生命周期存在于整个Mybatis的应用之中,所以一旦创建了SqlSessionFactory,就要长期保存它,直至Mybatis应用程序运行结束,所以可以认为SqlSessionFactory的生命周期就是Mybatis应用程序的生命周期。

SqlSessionFactory的创建会消耗可观的系统资源。因此在一般的应用中,我们只创建一个SqlSessionFactory实例,让它在整个Mybatis应用程序中共享。所以,SqlSessionFactory最佳的作用域是全局作用域。

SqlSession

SqlSession可以看做是JDBC中一个数据库连接对象(Connection对象),你可以在一个事务中执行多条SQL,并通过commit,rollback等方法,提交或回滚事务。

SqlSession应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接。一般使用try…catch…finally语句来保证其及时关闭。

因此SqlSession最佳作用域为方法作用域。

Mapper

Mapper作为一个接口,由SqlSession所创建,所以它的最大生命周期与SqlSession保持一致,随着SqlSession的关闭,Mapper的数据库连接资源也会消失,所以其生命周期应该小于等于SqlSession的生命周期。Mapper代表的是一个请求中的业务处理,所以它应该在一个请求中,一旦处理完相关的业务,就要及时废弃它。

Mybatis各组件的生命周期如图所示

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值