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语句缓存使用注意事项

工作中遇到一个select语句缓存问题(可提交读隔离级别下select语句没有读取到其它事物更新后的结果),场景如下: 数据库:mysql User表结构:   隔离级别:read c...
  • yfkscu
  • yfkscu
  • 2014年10月14日 18:52
  • 1738

MyBatis中如何禁用缓存

默认情况下,select语句总是使用缓存,但有些情况下,我们希望它总是刷新从而得到最新数据,看了下它的文档,配置不起作用,对配置文件的              不起作用,对sql映射文件的flush...

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

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

《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项

不得不再次感叹作者的牛逼哄哄!厉害的一笔! http://blog.csdn.net/luanlouis/article/details/41280959 0.写在前面     ...

《深入理解mybatis原理(三)》 MyBatis的一级缓存实现详解 及使用注意事项

0.写在前面         MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上。MyBatis提供了一级缓存、二级缓存 这两个缓存机制,能够很好地...
  • pfnie
  • pfnie
  • 2016年05月26日 15:00
  • 636

go里面select-case和time.Ticker的使用注意事项

上周末参加Go技术聚会,京东的美女工程师讲到一个select-case和time.tick的坑,觉得很有意思,记录一下。 package main import ( "fmt" "runtime...
  • wk3368
  • wk3368
  • 2015年01月13日 16:47
  • 1087

linux select()详解(一)-- 使用及注意事项

通过本文你会了解到: 1. select()原型及参数说明 2. select()应用情景 3. select()注意事项 4. select()作定时器...

Phalcon ORM查询结果集强制使用缓存的方法及注意事项

Phalcon ORM查访结果集强制使用缓存的方法及注意事项,解决PhalconException: Cache must be started first异常...

ABAP 筑基宝典(5) -- 关于使用READ TABLE语句的几点注意事项

转载自:http://www.dlsap.com/thread-34-1-1.html 向原作者 莫怀远 致谢   1.  如果使用READ TABLE语句来读取内部表数据,而不是简单看返回值判...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mybatis select语句缓存使用注意事项
举报原因:
原因补充:

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