MyBatis

MyBatis 中 in 连接条件语法

2021-11-02  本文已影响0人  思念_似水流年

需求:
条件语句中需要查询 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:指定该语句以什么字符结束。

上一篇 下一篇

猜你喜欢

热点阅读