MyBatis 实际使用案例-核心对象的生命周期

在编程式使用的这个demo 里面,我们看到了MyBatis 里面的几个核心对象:SqlSessionFactoryBuiler、SqlSessionFactory、SqlSession 和Mapper 对象。这几个核心对象在MyBatis 的整个工作流程里面的不同环节发挥作用。如果说我们不用容器,自己去管理这些对象的话,我们必须思考一个问题:什么时候创建和销毁这些对象?

在一些分布式的应用里面,多线程高并发的场景中,如果要写出高效的代码,必须了解这四个对象的生命周期。这四个对象的声明周期的描述在官网上面也可以找到。

http://www.mybatis.org/mybatis-3/zh/getting-started.html

我们从每个对象的作用的角度来理解一下,只有理解了它们是干什么的,才知道什么时候应该创建,什么时候应该销毁。

1)SqlSessionFactoryBuiler

首先是SqlSessionFactoryBuiler 。它是用来构建SqlSessionFactory 的, 而SqlSessionFactory 只需要一个,所以只要构建了这一个SqlSessionFactory,它的使命就完成了,也就没有存在的意义了。所以它的生命周期只存在于方法的局部。

2)SqlSessionFactory

SqlSessionFactory 是用来创建SqlSession 的,每次应用程序访问数据库,都需要创建一个会话。因为我们一直有创建会话的需要,所以SqlSessionFactory 应该存在于应用的整个生命周期中(作用域是应用作用域)。创建SqlSession 只需要一个实例来做这件事就行了,否则会产生很多的混乱,和浪费资源。所以我们要采用单例模式。

3)SqlSession

SqlSession 是一个会话,因为它不是线程安全的,不能在线程间共享。所以我们在请求开始的时候创建一个SqlSession 对象,在请求结束或者说方法执行完毕的时候要及时关闭它(一次请求或者操作中)。

4)Mapper

Mapper(实际上是一个代理对象)是从SqlSession 中获取的。

BlogMapper mapper = session.getMapper(BlogMapper.class);

它的作用是发送SQL 来操作数据库的数据。它应该在一个SqlSession 事务方法之内。

最后总结如下:

对象生命周期
SqlSessionFactoryBuiler方法局部(method)
SqlSessionFactory(单例)应用级别(application)
SqlSession请求和操作(request/method)
Mapper方法(method)

这个就是我们在编程式的使用里面看到的四个对象的生命周期的总结。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值