mabatis 多参数包含list时,使用foreach的用法
(1)单个参数为list
注意:使用@param注解时,mapper指定了参数名,xml中需要严格匹配
dao部分的mapper
public void getTags(@Param("tagIdList")List<Integer> tagIdList);
xml部分:
<select id="getTags">
SELECT
tag_id,tag_name
FROM tag
WHERE tag_id IN
<foreach collection="tagIdList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
ORDER BY tag_id
</select>
(2)多个参数,包含list
dao部分的mapper
public void getTags(@Param("userId") long userId,@Param("tagIdList") List<Integer> tagIdList);
xml部分:
<select id="getTags">
SELECT
user_id,tag_id,tag_name
FROM tag
WHERE user_id=#{userId}
AND
tag_id IN
<foreach collection="tagIdList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
ORDER BY tag_id
</select>
注意:参数为 list时,list 不能为空,可以通过在代码中向对象中添加一个默认值来保证不为空,不报错。比如我这边对list添加了一个Integer的最小值
tagIdList.add(MIN_VALUE); 我这边数据库中id值不会为负,所以对代码逻辑也没有影响。
记录以备不时之需。