186 字
1 分钟
MyBatis二级缓存导致数据读取不一致问题解决方案

MyBatis二级缓存导致数据读取不一致问题解决方案#

问题描述#

SpringBoot + MyBatis 可读已提交不生效,先在SpringBoot查询出结果然后在数据库修改值后在Java再次读取,结果读取的还是修改之前的值。

原因分析#

是MyBatis二级缓存导致的。

解决办法#

方案一:使用SqlSession清除缓存#

@Resource
private SqlSession sqlSession;
@Transactional(isolation = Isolation.READ_COMMITTED)
@Override
public void aaa() {
SysLog log1 = this.getById("");
log.info("log1【{}】", log1.getLogContent());
sqlSession.clearCache();
SysLog log2 = this.getById("");
log.info("log2【{}】", log2.getLogContent());
}

方案二:使用SqlSessionTemplate清除缓存#

@Resource
private SqlSessionTemplate sqlSessionTemplate;
@Transactional(isolation = Isolation.READ_COMMITTED)
@Override
public void aaa() {
SysLog log1 = this.getById("");
log.info("log1【{}】", log1.getLogContent());
sqlSessionTemplate.clearCache();
SysLog log2 = this.getById("");
log.info("log2【{}】", log2.getLogContent());
}

方案三:在SQL查询中禁用缓存#

<select id="getById" resultType="SysLog" useCache="false">
SELECT * FROM sys_log WHERE id = #{id}
</select>
MyBatis二级缓存导致数据读取不一致问题解决方案
https://twenhub.com/posts/mybatiser-ji-huan-cun-dao-zhi-shu-ju-du-qu-bu-yi-zhi-wen-ti-jie-jue-fang-an/
作者
Twenhub
发布于
2025-06-17
许可协议
CC BY-NC-SA 4.0