MyBatis 使用<foreach> 踩得坑 ,这里记录下。

首先介绍下<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} 

查询结果就正常了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值