mybatis一级缓存和二级缓存
2015-04-27 00:00
288 查看
摘要: 研究学习并使用mybatis缓存
mybatis缓存主要实现是PerpetualCache。
一级缓存实现:
BaseExecutor --> localCache参数。
当session.close()的时候会回调Excutor.close方法,从而情况本地缓存,所以一级缓存的生命周期和session同步,而且缓存是通过:
createCacheKey(ms, parameter, rowBounds, boundSql); localCache.putObject(key, list);
这里直的key的成分包含了sql参数,所以不同参数相同statement也会发起两次sql,所以这里缓存的也是对象(之前在一个博客上看到博主说是缓存的sql语句,是错误的,,如果看客有疑问或者问题希望留言告知)。
二级缓存:
需要在mybatis.xml里的settings开启:
<setting name="cacheEnabled" value="true"/>
这里开启后Configurtion里就会使用CacheExcutor,默认实现也是
PerpetualCache,当然可以在mapper.xml里指定自己的cache,这里使用ehcache的实现。
<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
这个cache是通过MapperStatement注入到cacheExcutor的,当调用cacheExcutor.query的时候会注入进去。
当调用session.close的时候只会删除一级缓存,而二级缓存还会放在CacheExcutor.TransactionalCacheManager里面。当调用update的时候会根据isFlushCacheRequired来判断是否需要清除缓存,isFlushCacheRequired在mapper.xml里的sql文里配置flushCache属性。
这里有个疑问:之前看别人博客说只要进行插入更新就会清空二级缓存,但这里的代码是只有指定fushCache为true才会去删缓存,还需看代码才行。。
mybatis缓存主要实现是PerpetualCache。
一级缓存实现:
BaseExecutor --> localCache参数。
当session.close()的时候会回调Excutor.close方法,从而情况本地缓存,所以一级缓存的生命周期和session同步,而且缓存是通过:
createCacheKey(ms, parameter, rowBounds, boundSql); localCache.putObject(key, list);
这里直的key的成分包含了sql参数,所以不同参数相同statement也会发起两次sql,所以这里缓存的也是对象(之前在一个博客上看到博主说是缓存的sql语句,是错误的,,如果看客有疑问或者问题希望留言告知)。
二级缓存:
需要在mybatis.xml里的settings开启:
<setting name="cacheEnabled" value="true"/>
这里开启后Configurtion里就会使用CacheExcutor,默认实现也是
PerpetualCache,当然可以在mapper.xml里指定自己的cache,这里使用ehcache的实现。
<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
这个cache是通过MapperStatement注入到cacheExcutor的,当调用cacheExcutor.query的时候会注入进去。
当调用session.close的时候只会删除一级缓存,而二级缓存还会放在CacheExcutor.TransactionalCacheManager里面。当调用update的时候会根据isFlushCacheRequired来判断是否需要清除缓存,isFlushCacheRequired在mapper.xml里的sql文里配置flushCache属性。
这里有个疑问:之前看别人博客说只要进行插入更新就会清空二级缓存,但这里的代码是只有指定fushCache为true才会去删缓存,还需看代码才行。。
相关文章推荐
- MyBatis 延迟加载,一级缓存,二级缓存设置
- 博为峰JavaEE技术文章 ——MyBatis 缓存(2)一级缓存与二级缓存
- mybatis介绍级一级缓存,二级缓存
- Mybatis一级缓存和二级缓存介绍
- mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache
- MyBatis的一级缓存和二级缓存
- MyBatis 延迟加载,一级缓存,二级缓存设置
- mybatis:一级缓存And二级缓存
- MyBatis缓存分为一级缓存和二级缓存(二)
- mybatis一级缓存和二级缓存
- MyBatis一级缓存,二级缓存
- Mybatis学习笔记-一级缓存与二级缓存
- Mybatis (七)延迟加载\一级缓存\二级缓存
- MyBatis一级缓存和二级缓存实现
- MyBatis 延迟加载,一级缓存,二级缓存设置
- 博为峰JavaEE技术文章 ——MyBatis 缓存(2)一级缓存与二级缓存
- Mybatis 一级缓存和二级缓存
- Mybatis一级缓存和二级缓存
- mybatis一级缓存二级缓存
- Mybatis第八篇【一级缓存、二级缓存、与ehcache整合】