mybatis一級緩存和二級緩存

mybatis緩存主要實現是PerpetualCache。 sql

一級緩存實現: 緩存

BaseExecutor --> localCache參數。

    當session.close()的時候會回調Excutor.close方法,從而狀況本地緩存,因此一級緩存的生命週期和session同步,並且緩存是經過: session

createCacheKey(ms, parameter, rowBounds, boundSql); localCache.putObject(key, list);


這裏直的key的成分包含了sql參數,因此不一樣參數相同statement也會發起兩次sql,因此這裏緩存的也是對象(以前在一個博客上看到博主說是緩存的sql語句,是錯誤的,,若是看客有疑問或者問題但願留言告知)。 mybatis

二級緩存: app

    須要在mybatis.xml裏的settings開啓: ui

<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屬性。 spa

這裏有個疑問:以前看別人博客說只要進行插入更新就會清空二級緩存,但這裏的代碼是隻有指定fushCache爲true纔會去刪緩存,還需看代碼才行。。 xml

相關文章
相關標籤/搜索