ibatis处理数据,更新数据后服务器需重启才能查询

最近遇到个小问题,就是在做项目时,对数据更新后,每次都不能通过查询语句显示到最新的数据,经过反复的测试,发现查询,保存,更改相关的sql语句或方法都没有错误,更让人无语的是,每次重启服务后,上次更新的数据就能正常显示了,而再进行更新操作时,有会出现问题,感觉应该是缓存问题。说明下,本人项目所用的框架是springMVC+ibatis,上网查了下,感觉可能与ibatis一个设置cachemodel有关,就专门了解了下,然后对照自己的ibatis配置文件,终于找出了问题所在相关代码如下 :

 
<cacheModel type="MEMORY" id="cacheXtsz">
       <flushOnExecute statement="HIS_XT_XTSZ_NEW.newXt_xtsz_new"/>
       <flushOnExecute statement="HIS_XT_XTSZ_NEW.editXt_xtsz_new"/>
       <flushOnExecute statement="HIS_XT_XTSZ_NEW.delXt_xtsz_new"/>
       <flushOnExecute statement="HIS_XT_XTSZ_NEW.editXt_xtsz_newforUpLoad"/>     
       <property name="reference-type" value="WEAK"/>
    </cacheModel>

这是我的原配置文件,其中查询时用到:

<select id="queryXt_xtsz_new" parameterClass="java.util.Map" resultMap="xt_xtsz_newMap" cacheModel="cacheXtsz">
   Select * From (
       SELECT rownum as rowIndex, t.*
       FROM xt_xtsz_new t
        <include refid="xt_xtsz_newsql"/>
          order by xtszid
        )
        <dynamic prepend="WHERE">
            <isNotNull prepend="AND" property="start">
              rowIndex BETWEEN #start# AND #end#
            </isNotNull>
        </dynamic>
 </select>

我发现在cacheModel配置中少了flushInterval这个,经网上了解到,这个是自动刷新缓存,少了这个意义上就是不能自动刷新了,所以,当数据更改时,再去查询,实际上一直查到的是缓存中的数据,所以导致你的数据库中数据已经更新,但页面上却显示的和数据库的不一致,这个如果发现不了,很让人头疼。所以我给添加上了,如下

<cacheModel type="MEMORY" id="cacheXtsz">
       <flushOnExecute statement="HIS_XT_XTSZ_NEW.newXt_xtsz_new"/>
       <flushOnExecute statement="HIS_XT_XTSZ_NEW.editXt_xtsz_new"/>
       <flushOnExecute statement="HIS_XT_XTSZ_NEW.delXt_xtsz_new"/>
       <flushOnExecute statement="HIS_XT_XTSZ_NEW.editXt_xtsz_newforUpLoad"/> 
       <flushInterval seconds="2"/>    <!--添加-->
       <property name="reference-type" value="WEAK"/>
    </cacheModel>

这样结果就正常了




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值