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属性。

posted @ 2016-01-07 14:01  QQ天堂  阅读(663)  评论(0编辑  收藏  举报