美文网首页
mybatis cache无效

mybatis cache无效

作者: UUID | 来源:发表于2018-03-27 18:10 被阅读30次

    在项目中有个地方在使用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配置了使用缓存,那么如果参数值相同,则查询语句的结果就会被缓存。

    相关文章

      网友评论

          本文标题:mybatis cache无效

          本文链接:https://www.haomeiwen.com/subject/rxvscftx.html