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:  接收参数时不需要 #注入,直接写参数名就可以

猜你喜欢

转载自blog.csdn.net/myself_wqx/article/details/79182070