<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)所无法做到的,只能传递固定的参数。