foreach写法规范注意事项Mybatis

foreach写法一般来说,有的是在外面用open, close写括号。有的是直接在foreach语句里面写括号:

<foreach collection="flavors" item="df" separator=",">
            (#{df.dishId}, #{df.name}, #{df.value})
        </foreach>

 <foreach collection="dishIds" item="dishId"  separator="," open="(" close=")">
            #{dishId}
        </foreach>

上面两种写法都正确。第一个是插入的,要插入的每个数据里有的数据是(#{df.dishId}, #{df.name}, #{df.value}),所以在foreach语句里面写括号。
第二个是查询,在 IN 后面写了这么多。说的是只要在这么多里面中的一个就可以。所以这个可以在外面包括号,会把里面所有的数据全部包起来。

错误写法

   <insert id="insertBatch">
        insert into setmeal_dish (setmeal_id, dish_id, name, price, copies) values
        <foreach collection="setmealDishes" item="setmealDish" separator="," open="(" close=")">
            #{setmealDish.setmealId}, #{setmealDish.dishId}, #{setmealDish.name}, #{setmealDish.price}, #{setmealDish.copies}
        </foreach>
    </insert>

这个写法就是错误的。他应该在里面包,因为是插入,所以每插入一个数据都要包裹起来。因此,如果在外面用open, close把这些包裹起来,插入两条数据时的SQL语句就会是这个样子:

insert into setmeal_dish (setmeal_id, dish_id, name, price, copies) values
    (1, 101, 'Dish 1', 10.50, 2,     2, 102, 'Dish 2', 12.00, 3)

但是我们实际想要的是:

insert into setmeal_dish (setmeal_id, dish_id, name, price, copies) values
    (1, 101, 'Dish 1', 10.50, 2),
    (2, 102, 'Dish 2', 12.00, 3)

总结

foreach标签在插入时,括号要写在里面。
在查询(例如IN后面时),需要把括号写在外面(open, close, separator)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值