MyBatis动态SQL笔记

foreach主要是用于一个循环,大部分用到的是循环的生成sql,下面说一下动态foreach的属性:
  foreach元素的属性主要有item,index,collection,open,separator,close。
  1、collection表示如何来得到这个集合,如果传入的直接为一个List,那么collection值就为list,如果直接传入的为一个array不可变数组,那么collection值就为array,如果传入的为一个dto,比如dto里面的array变量名为idLists,那么collection的值就为idLists。
  2、item表示集合中每一个元素进行迭代时的别名,比如item为value,那么,每次获取的都使用#{value}即可
  3、index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,一般很少使用这个
  4、open表示该语句以什么开始
  5、separator表示在每次进行迭代之间以什么符号作为分隔符
  6、close表示以什么结束

二、原理:
  动态SQL,最后都会根据条件拼成SQL,foreach也不例外,原理为:
  首先根据collection来得到集合,然后写入open字符,然后开始遍历:

每次遍历,都会执行里面的条件得到生成的sql,然后加入separator,遍历完成之后,加入close字符。

ServiceMapper.xml

<update id="productShelves">
    UPDATE pm_service SET state=3
        WHERE id IN
    <foreach collection="ids" item="id" index="index" open="(" separator="," close=")" >
       #{id}
    </foreach>
</update>
ServiceMapper.java

ServiceServiceImpl.java


IserviceService.java


provider中引用:


总结: item 的值 必须要和每次循环的#{} 中的值一样

 collection:  接收参数时不需要 #注入,直接写参数名就可以

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值