mybatis select语句缓存使用注意事项

转载 2014年09月05日 10:57:03
工作中遇到一个select语句缓存问题(可提交读隔离级别下select语句没有读取到其它事物更新后的结果),场景如下:
数据库:mysql
User表结构:

隔离级别:read committed(可提交读)
Mapper文件:

 代码如下:


执行结果:

问题:虽然我们把mysql隔离级别设置为read committed,但是第二次查询的结果并没有看到其它事物提交的更新结果。

问题分析:查看日志发现第一次的查询sql打印出来了,但是第二次查询并没有打印sql;猜测可能是由于第二次查询直接使用上一次查询的缓存导致的问题。查看mybatis用户手册,看到select语句中有关于缓存的配置:flushCache配置(默认为false)、useCache(默认为true),也就是说select语句默认缓存是开启的,对于我们这个场景应该把这个缓存给禁掉。

问题解决:同一个session的select语句上设置flushCache="true"

mybatis手册中一下两个配置的解释:
flushCache
将其设置为true,无论语句什么时候被调用,都会导致缓存被清空。默认值:false。
useCache
将其设置为true,将会导致本条语句的结果被缓存。默认值:true。

测试发现,如果设置useCache="false"没有设置flushCache,select的结果还是被缓存了;把flushCache设置为true就没有使用缓存结果了。不知道这是不是mybatis的一个bug。

MyBatis中select语句

id : 在这个命名空间的唯一标识符,可被其他语句引用。 paramterType:传递给此语句的参数的完整类名或者别名。 paramterMap:不推荐使用,这个参数将来可能被删除。 resu...
  • u011393781
  • u011393781
  • 2016年09月02日 16:31
  • 1760

mybatis 在select语句中使用foreach语句报错

Mybatis foreach 问题 Parameter 'item' not found. Available parameters are [list]    转自:http...
  • omayyouhappy
  • omayyouhappy
  • 2017年05月16日 15:52
  • 738

Mybatis Select...for update用法

Mybatis Select…for update用法最近有需求批量处理大量数据,由于数据量很大,如果加分布式锁让一个线程跑需要太长时间,所以考虑集群中二十几台机器并行执行,每次取1000条数据处理。...
  • ToBeABetterOne
  • ToBeABetterOne
  • 2017年10月13日 15:58
  • 2076

Mybatis 缓存问题影响

Mybatis二级缓存问题: 1. 两个作用域:session和namespaces *一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Sess...
  • qq_17612199
  • qq_17612199
  • 2016年03月04日 10:44
  • 1830

MyBatis中Like语句使用总结

oracle数据库: SELECT * FROM user WHERE name like CONCAT('%',#{name},'%') 或 : SELECT * FROM user W...
  • th676759829
  • th676759829
  • 2015年07月07日 15:29
  • 10050

MyBatis 中mapper.xml文件中<sql>标签,<select>标签是使用

和 用来封装SQL语句, 来调用 代码片段: SELECT * FROM `body_index`              x...
  • qq_39654446
  • qq_39654446
  • 2017年09月29日 14:54
  • 713

MyBatis的一级缓存实现详解 及使用注意事项

MyBatis的一级缓存实现详解 及使用注意事项
  • u012621115
  • u012621115
  • 2016年03月28日 15:57
  • 2365

Mybatis之select元素

select 查询语句是 MyBatis 中最常用的元素之一,光能把数据存到数据库中价值并不大,如果还能重新取出来才有用,多数应用也都是查询 比修改要频繁。对每个插入、更新或删除操作,通常对应多个查询...
  • msj_god_boy
  • msj_god_boy
  • 2016年09月21日 23:05
  • 1450

mybatis @Select注解中如何拼写动态sql

package cn.erongcai.hrplatform.dao.demand; import java.util.List; import org.apache.ibatis.annotat...
  • qq_32786873
  • qq_32786873
  • 2017年10月20日 17:13
  • 3550

mybatis3下的通用sql的select语句执行类

项目中为了使项目的数据库操作从dao层转移到service层,只好写一个通用的sql语句拼接类和相应的mapper类和mapper的xml文件,自定义的SelectBuilder.java的代码如下:...
  • kojhliang
  • kojhliang
  • 2012年02月24日 22:18
  • 1122
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mybatis select语句缓存使用注意事项
举报原因:
原因补充:

(最多只允许输入30个字)