需求:
条件语句中需要查询 user_id 字段在一个指定范围内,DAO 文件中可以使用如下传值:
List<UserProjectDto> selectUserProjectDtosByUserIds(@Param("userIds") List<Integer> userIds);
Mapper.xml 文件中使用传参如下:
<select id="selectUserProjectDtosByUserIds" resultMap="UserProjectDto">
SELECT
up.*,
p.id p_id,
p.name p_name,
p.description p_description,
p.platform p_platform,
p.creator_uid p_creator_uid,
p.create_time p_create_time
FROM
user_project up
JOIN project p ON up.project_id = p.id
WHERE
up.user_id IN
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
#{userId}
</foreach>
</select>
通过 <foreach> 标签将传参指定用(,)连接起来
执行结果如下:
up.user_id IN ( ? , ? )
传参:Parameters: 3(Integer), 1(Integer)
foreach 的主要属性有:item,index,collection,open,separator,close。
item:指定集合中每一个元素进行迭代时的别名;
index:指定一个名字,用于表示在迭代过程中,每次迭代到的位置,可以不指定;
collection:指定迭代的集合;
open:指定该语句以什么字符开始;
separator:指定在每个迭代元素之间以什么符号作为分隔符;
close:指定该语句以什么字符结束。