MyBatis缓存

分类:计算机 | 数据库 | 综合 1256
更新:2020-04-05 12:09:20
编辑

参考资料

https://blog.csdn.net/u014749862/article/details/80297943
mybatis 缓存的使用, 看这篇就够了

概述

缓存的重要性是不言而喻的。 使用缓存, 我们可以避免频繁的与数据库进行交互, 尤其是在查询越多、缓存命中率越高的情况下, 使用缓存对性能的提高更明显。
mybatis 也提供了对缓存的支持, 分为一级缓存和二级缓存。 但是在默认的情况下, 只开启一级缓存(一级缓存是对同一个 SqlSession 而言的)。

一级缓存

二级缓存

在mapper.xml中开启二级缓存

在mapper.xml文件中可以通过如下配置来开启二级缓存:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ctd.cmp.loganalyse.bean.pojo.mapper.CtdBizMetricsMapper">
    <!-- 缓存10分钟 -->
    <cache eviction="FIFO" flushInterval="600000" size="4096" readOnly="true"/>
   <select id="save" parameterType="XX" flushCache="true" useCache="false"> </select>
</mapper>

其中,各个属性的意义如下:
1、eviction:缓存回收策略
LRU:最少使用原则,移除最长时间不使用的对象。
FIFO:先进先出原则,按照对象进入缓存顺序进行回收。

综合

mybatis在mapper.xml中禁用某个方法的缓存

禁用某个方法缓存,默认是useCache="true"

<select id="findUser" resultType="user" parameterType="int" useCache="false">
            SELECT * FROM USER WHERE id = #{id}
</select>

某个增删改方法执行的时候不刷新缓存,应该设置flushCache="false"。默认是flushCache="true",刷新缓存。

<!--    flushCache="false" 默认为true-->
    <insert id="saveUser" parameterType="user" flushCache="false">
INSERT INTO USER (username,sex,birthday,address) VALUES (#{username},#{sex},#{birthday},#{address})
</insert>