学习地址:http://www.mybatis.org/ehcache-cache/
<settings>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>
<!--配置二级缓存提供商实现类,使用的是默认全局缓存策略-->
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
全局缓存策略就是所有的Mapper文件都是使用该缓存策略。
<!--配置二级缓存提供商实现类,使用的是默认全局缓存策略-->
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
<ehcache>
<!-- 缓存的磁盘位置(数据存在内存不够时,存在磁盘中) -->
<diskStore path="D:/mybatis_cache"/>
<!-- 默认的缓存策略: 如果开发者在某一个需要缓存的文件配置了自定义缓存,就不使用默认的,如果没有配置,就使用默认缓存策略
maxElementsInMemory 在内存最多缓存多少个对象
eternal 是否永久有效
timeToIdleSeconds 最大空闲时间,单位:秒
timeToLiveSeconds 最大在线时间,单位:秒
overflowToDisk 超出内存是否保存在磁盘
-->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
/>
</ehcache>
public class User implements Serializable{
private static final long serialVersionUID = -8366151150155170110L;
}
<mapper namespace="cn.zj.mybatis.dao.UserMapper">
<!-- 当前表的映射开启支持二级缓存,并设置相关的缓存提供商,以及缓存的相关配置 -->
<cache type="org.mybatis.caches.ehcache.EhcacheCache" >
<!--最大的空闲时间 -->
<property name="timeToIdleSeconds" value="10000"/>
<!-- 最大的在线时间 -->
<property name="timeToLiveSeconds" value="20000"/>
<!-- 内存的大小 b字节 m1 =1024k 1k=1024b -->
<property name="maxEntriesLocalHeap" value="2000000"/>
<!-- 文件的大小 b字节-->
<property name="maxEntriesLocalDisk" value="20000000"/>
<!-- 算法 LRU:最少使用优先, "LFU" or "FIFO:先进先出 -->
<property name="memoryStoreEvictionPolicy" value="LRU"/>
</cache>
<select id="selectAll" resultType="User">
select * from user
</select>
</mapper>
public class User implements Serializable{
private static final long serialVersionUID = -8366151150155170110L;
}
@Test
public void testSelectByPrimaryKey() {
for (int i = 0; i < 1000; i++) {
// 1.创建SqlSession操作对象
SqlSession openSession = MyBatisUtil.openSession();
// 2.创建UserMapper接口的代理对象
UserMapper mapper = openSession.getMapper(UserMapper.class);
User user2 = mapper.selectByPrimaryKey(3);
System.out.println("用户:"+user2);
// 4.关闭session
openSession.close();
}
}
DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.0
DEBUG [main] - ==> Preparing: select * from user where id = ?
DEBUG [main] - > Parameters: 3(Integer)
DEBUG [main] - < Total: 1
DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.5
DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.6666666666666666
DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.75
DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.8
DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.8333333333333334
DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.8571428571428571
DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.875
DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.8888888888888888
DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.9