mybatis的二级缓存的使用
1.引入ehcache的jar包和mybatis整合ehcache的jar包;
<!-- ehchache --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.8.3</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.0.0</version> </dependency>
2.配置ehcache.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <ehcache updateCheck="false" name="txswx-ehcache"> <diskStore path="java.io.tmpdir"/> <!-- DefaultCache setting. --> <defaultCache maxEntriesLocalHeap="10000" eternal="true" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true" maxEntriesLocalDisk="100000"/> </ehcache>
3.mybatis-config.xml中开启二级缓存:<setting name="cacheEnabled" value="true"/>;
4.applicationContext.xml中配置ehcache的管理器;
<!-- Cache配置 --> <cache:annotation-driven cache-manager="cacheManager"/> <bean id="ehCacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="/WEB-INF/conf/ehcache.xml"/> <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cacheManager-ref="ehCacheManagerFactory"/>
5.*mapper.xml文件中配置缓存:
<cache type="org.mybatis.caches.ehcache.LoggingEhcache" > <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>
这样二级缓存就起作用了。
不启用缓存:
修改statement的useCache为false,表示该statement不再进行二级缓存
<select id="getCountByName" parameterType="java.util.Map" resultType="INTEGER" statementType="CALLABLE" useCache="false">
执行更新后,不刷新二级缓存:
<update id="updateUser" parameterType="cn.itcast.mybatis.po.User" flushCache="false"> update user set username = #{username},birthday = #{birthday},sex = #{sex} where id = #{id} </update>