注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭研后台技术中心的博客

 
 
 
 
 

日志

 
 

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

来自yfkscu@126   2013-06-29 12:45:12|  分类: 默认分类 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
工作中遇到一个select语句缓存问题(可提交读隔离级别下select语句没有读取到其它事物更新后的结果),场景如下:
数据库:mysql
User表结构:
2013年06月29日 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客
 
隔离级别:read committed(可提交读)
Mapper文件:
2013年06月29日 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客
 代码如下:
2013年06月29日 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客
2013年06月29日 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客
 
执行结果:
2013年06月29日 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客
 
问题:虽然我们把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。
  评论这张
 
阅读(6925)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017