首先介绍下<foreach> 如何使用,这里先引入官方案例:
<select id="selectPostIn" resultType="domain.blog.Post"> SELECT * FROM POST P WHERE ID in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>
这里我所踩得坑就是擅自把"item"改成自己的类成员变量了:
我类中有个类成员变量:
private String procFlag;
我的代码如下:
<if test="procFlagList != null and procFlagList.size > 0">
AND a.proc_flag in
<foreach collection="procFlagList" index="index" item="procFlag" open="(" separator="," close=")">
#{procFlag}
</foreach>
</if>
<if test="procFlag != null and procFlag != ''">
AND a.proc_flag = #{procFlag}
</if>
赋值的时候我只赋值了list的值,并没有给procFlag赋值,最后执行的时候发现,2个条件都执行了,最后通过打印的结果发现,
AND a.proc_flag = 2
这个“2”的值经过排查发现是list的最后一个值,最终我明白<foreach>循环的时候把值set给procFlag了,导致了2个条件都执行的结果了。所以,这里总结出来发现,
item="item" item值最好不要改成类成员变量
最后,我把
item="procFlag" 改成 item="item" 、#{procFlag} 改成 #{item}
查询结果就正常了。