mybatis缓存问题导致无法查询到数据

Posted 21Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis缓存问题导致无法查询到数据相关的知识,希望对你有一定的参考价值。

今天查询记录时,发现重复查询结果时出现空记录的情况

查看控制台信息,只有红色框选部分有进行查询数据,而其他没有。然而上图可看出有两条数据是能展现出来的,故有可能是mybatis缓存命中的。

因此在mapper文件中加入flushCache="true" useCache="false"

<select id="querySuppliers"  flushCache="true" useCache="false"  resultType="cn.com.ebidding.web.yzPurchaseMain.dao.model.QueryYzResultModel">
		select t1.id id,t2.company_name name
		from lib_suppliers t1, sys_company t2
		where t1.is_deleted = \'0\'
		and t2.is_deleted = \'0\'
		and t1.company_id = t2.id
		and t1.agent_id = #{agentId}
		and t1.id in
		<foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
		#{item}
		</foreach>
	</select>

问题解决

总结:

(1) 当为select语句时:

  • flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。

  • useCache默认为true,表示会将本条语句的结果进行二级缓存。

(2) 当为insert、update、delete语句时:

  • flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。

  • useCache属性在该情况下没有。

以上是关于mybatis缓存问题导致无法查询到数据的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis复杂查询动态sql及缓存详解

MyBatis与Memcached集成后缓存数据不一致问题

Mybatis缓存机制

Spring整合MyBatis为什么导致MyBatis一级缓存失效

Mybatis关于复杂的SQL查询的处理&Mybatis的缓存机制

Mybatis关于复杂的SQL查询的处理&Mybatis的缓存机制