mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存
开启mybatis的二级缓存
<!--设置mybaits对缓存的支持-->
<property name="configurationProperties">
<props>
<!-- 全局映射器启用缓存 *主要将此属性设置完成即可-->
<prop key="cacheEnabled">true</prop>
<!-- 查询时,关闭关联对象即时加载以提高性能 -->
<prop key="lazyLoadingEnabled">false</prop>
<!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->
<prop key="aggressiveLazyLoading">true</prop>
</props>
</property>
测试,产生了两条sql语句,说明缓存没有生效
因为我们还需要在BookMapper.xml中添加二级缓存核心类
再次测试,只产生一条sql语句,说明使用了缓存
当查询两次,如果控制台产生两条查询语句,说明mybatis不能同时缓存多条数据。
如果只产生一条查询语句,说明mybatis默认缓存多条数据
测试
(框架的缓存策略)
说明mybatis二级缓存开启,默认既可以缓存单条,也可以缓存多条数据
也可以通过mapper.xml中的userCache属性控制是否使用缓存
测试
此时表示多条数据的缓存已经关闭
小结
对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度
实现方法如下:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔flushInterval,比如设置为30分钟、60分钟、24小时等,根据需求而定
mybatis整合redis
稍微大型项目都会使用redis缓存
步骤与ehcache缓存几乎一致