动态SQL之foreach 举例详解

 
<foreach collection="集合属性名" item="item的别名" separator="元素之间的分隔符" open="开始的符号" close="结束的符号">
2    SQL片段
3</foreach>
  • collection:指定要遍历的集合属性的名称,这个属性通常来自于参数对象。
  • item:表示集合中每一个元素的别名,用于在foreach内部引用当前遍历的元素。
  • separator:遍历元素之间的分隔符,默认为空格,例如在IN语句中,多个值之间可能需要逗号分隔。
  • open:在遍历结果之前添加的起始字符串,例如,IN语句的开头可能需要一个左括号。
  • close:在遍历结果之后添加的结束字符串,与open相对应,例如IN语句的右括号。

这么看可能不清楚,接下来我们来举例说明:

@Mapper
public interface SetmealDishMapper {


    List<Long> getSetmealDishIds(List<Long> dishIds);
}

此处传入参数为dishIds 

 <select id="getSetmealDishIds" resultType="java.lang.Long">
        select setmeal_id from setmeal_dish where setmeal_dish.dish_id in
        <foreach collection="list" item="dishId" separator="," open="(" close=")">
            #{dishId}
        </foreach>
    </select>

 

此处collection有且仅有两种写法:“list”和“dishIds” ,都可以,list来源于参数类型List,dishIds则来源于参数名,且必须和参数名一致。

item则必须与foreach中的值 传入参数名保持一致。#{dishId} 

separator代表每个传入参数中间的分割点;此处传入list集合,其中数据例如1,2,3,4;“,”代表以逗号为分割传入参数查询。

open和close代表起始位置和结束位置,因为fore语句需要知道什么时候迭代结束。

完整语句如(#{dishId} ,#{dishId} ,#{dishId} .........)集合中有多少个传入多少个;这也是例如通过普通的 delete from xxx where Id in (1,2,3,4)所无法做到的,只能传递固定的参数。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值