pom文件配置:
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.1</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version>
</dependency>
<dependency><groupId>org.mybatis.caches</groupId><artifactId>mybatis-ehcache</artifactId><version>1.1.0</version>
</dependency>
<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache-core</artifactId><version>2.5.3</version>
</dependency>
spring加載ehcache配置文件
<!-- 緩存管理器 --><bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"><property name="cacheManagerConfigFile" value="classpath:ehcache.xml" /></bean>
ehcache.xml:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://ehcache.xsd"><!--diskStore:緩存數據持久化的目錄 地址 --><diskStore path="java.io.tmpdir" /><defaultCache maxElementsInMemory="1000"maxElementsOnDisk="10000000" eternal="false" overflowToDisk="false"diskPersistent="false" timeToIdleSeconds="120" timeToLiveSeconds="120"diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"></defaultCache></ehcache>
mybatis.xml開啟緩存:
<settings><!-- 開啟緩存 --><setting name="cacheEnabled" value="true" /><!-- 支持駝峰 --><setting name="mapUnderscoreToCamelCase" value="true" /><!-- lazyLoadingEnabled:延遲加載啟動,默認是false --><setting name="lazyLoadingEnabled" value="false" /><!-- aggressiveLazyLoading:積極的懶加載,false的話按需加載,默認是true --><setting name="aggressiveLazyLoading" value="true" /></settings>
然后在對應的mapper.xml里面加上
<!-- 開啟二級緩存 --><cache type="org.mybatis.caches.ehcache.EhcacheCache"><property name="timeToIdleSeconds" value="3600" /><!--1 hour --><property name="timeToLiveSeconds" value="3600" /><!--1 hour --><property name="maxEntriesLocalHeap" value="1000" /><property name="maxEntriesLocalDisk" value="10000000" /><property name="memoryStoreEvictionPolicy" value="LRU" /></cache>
(1)property參數配置不加也可以,都會有一個默認值,大家也可以查查一共有哪些配置,然后根據自己的需要來配置,然后這個配置是會帶上cache執行的日志,如果不要帶日志可以把LogginEhcache改成EhcacheCache。
(2)如果readOnly為false,此時要結果集對象必須是可序列化的。需要將實體對象implements Serializable
上面這個是全局設置,在每條單獨的sql語句上,還可以有局部設置,比如:
<select id="getOrder" parameterType="int" resultType="TOrder" useCache="false">
...
</select>
useCache="false"表示該select語句不使用緩存(即使xml最開頭的全局cache啟用)
默認情況下,如果全局開啟了緩存,insert/update/delete成功后,會自動刷新相關的緩存項,但有一點要特別注意:在mybatis與hibernate混用時,由于mybatis與hibernate的緩存是無關的,如果用mybatis做select查詢,用hibernate做insert/update/delete,hibernate對數據的修改,并不會刷新mybatis的緩存。