MyBatis源码研究-缓存

在学习Hibernate中,经常有看到一级缓存和二级缓存的概念,并且有了解到,一级缓存是session级别的缓存一般缓存在内存中,二级缓存是指sessionfactory级别的缓存,一般缓存在内存或者物理介质中。

但是在MyBatis中,这两天看源码的时候,好像MyBatis中的缓存的定义和Hibernate中的有所不同。
      一级缓存是在 BaseExecutor中的通过 localCache进行处理,这个缓存是默认开启的。是属于事物一个Conn内的缓存。
    二级缓存是在 CachingExecutor进行处理,并通过 TransactionalCacheManager 进行管理,这个缓存是需要通过配置的方式设定开启,缓存范围是SqlSession级别的 。默认是 PerpetualCache进行二级缓存的处理,但是也可以通过配置的方式,手动执行缓存的执行类,该执行类需要继承接口org.apache.ibatis.cache.Cache。
    在二级缓存的管理中,可以分成两个阶段,一个是query的时候,缓存的临时存放,存放在TransactionalCache,一个阶段是commit的时候,缓存会存放到 CacheingExecutor对象中的TransactionCache数据结构中。
在Query的时候,程序执行如下:
MyBatis源码研究-缓存

而在commit的时候,MyBatis会将缓存数据通过装饰器模式,进行事物的异步控制、日志管理、序列化、内存管理等。执行过程如下:
MyBatis源码研究-缓存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值