**
遇到问题的场景:
**
一张数据库中的表:table_name,这张表在开发的过程中对应两个Mapper(比如两个模块:模块a, 模块b),mybatis 默认是开启一级缓存的。现在的情况是我在模块a中用程序修改了table_name中的某个字段值(比如:field原来是0,现在改为1),通过模块a现在已经修改完了。我在模块b中查询时发现表table_name中的field字段还是0。由于之前查询过,参数没有发生任何变化,导致模块b中走了mybatis缓存。
原来的sql:
<select id="selectById" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List"/>
from table_name
WHERE id = #{id,jdbcType=VARCHAR}
</select>
解决方式:
1. 这种方式是我实际采用的方式:
<!--在sql语句中增加了 flushCache=true-->
<select id="selectById" resultMap="BaseResultMap" flushCache="true">
select
<include refid="Base_Column_List"/>
from table_name
WHERE id = #{id,jdbcType=VARCHAR}
</select>
2. 这种方式也是可以解决的:
<!--生成随机值,保证每次参数都不一样-->
<select id="selectById" resultMap="BaseResultMap" flushCache="true">
select
<include refid="Base_Column_List"/>
from table_name
WHERE id = #{id,jdbcType=VARCHAR}
AND #{random,jdbcType=VARCHAR} = #{random,jdbcType=VARCHAR}
</select>