mybatis cache无效

在项目中有个地方在使用mybatis时,需要查询下一个自增序列的值,如果系统中有重复的,则获取下一个序列值。mybatis xml配置如下:

<select id="getSrcSeq" resultType="int" useCache="false">
     SELECT nextval('ag_src_key_seq')
 </select>

程序伪代码如下,如果存在,则继续获取下一个:

do {
   srcCode = srcMappingMapper.getSrcSeq();
 } while (hasSrc(srcCode));

发现当hasSrc 返回true时,继续获取下一个,然后,SRCCode并没有发生变化。正如你所见,已经关闭了该语句的cache,但是好像并没有生效。
解决方式有以下两种方法:

设置flushCache="true"

<select id="getSrcSeq" resultType="int" useCache="false" flushCache="true">
     SELECT nextval('ag_src_key_seq')
</select>

通过配置flushCache 为true 强制刷新缓存。

参数设置一个随机字符串(或者数字)

<select id="getSrcSeq" parameterType="string" resultType="int">
    SELECT nextval('ag_src_key_seq') where '200' = #{value} or 1=1
 </select>

调用的地方如下:

do {
   srcCode = srcMappingMapper.getSrcSeq(String.valueof(Math.random()));
 } while (hasSrc(srcCode));

使用这种方式能够生效的原因就是,每次参数不同,会导致mybatis刷新cache。
mybatis配置了使用缓存,那么如果参数值相同,则查询语句的结果就会被缓存。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 《情非得已》 0篇文章 管理员:小雯姐姐 这几天,大家的手机都被一桌子农村土菜刷屏。也就是一个上海的女生和他出生在...
    小雯姐姐阅读 483评论 2 1
  • 什么是Quartz2D Quartz 2D 是一个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D的作...
    SevEnOye阅读 231评论 0 0
  • “喂?菲菲,你到哪儿了?苏书记刚刚来找你!哎,你又迟到!”刘明昊急急给宋菲菲打电话确定位置。 “苏书记回来啦?哦,...
    云不一阅读 484评论 0 0
  • 思维导图学习中,首先学会如何思考是非常关键的一步。本次学习主要针对思考法进行课程目标设定,思考方法介绍,及场景演练...
    colorwendy阅读 286评论 0 1