mybatis处理list

许久没写过博客,记录一下。

业务中,需要根据输入的查询条件,查找用户信息并做分页:
首先在dao层传入一个param:

    IPage<SysUserListResp> selectListPage(Page<SysUserListResp> page,@Param("params") Map<String, Object> params);

其中,param的类型为Map<String, Object>,在本次业务中,既包括了String也有List(在service层将查询条件转换成了用户表id集合,方便查询),那么在mybatis中怎么处理这个list呢?
直接上代码:

    <select id="selectListPage" resultType="model.user.resp.SysUserListResp" parameterType="java.util.HashMap" >
        select a.user_id as userId,
         a.username as username,
         a.status as status,
         a.create_time as createTime,
         a.emp_code as employeNum,
         a.dep_name as depName,
         c.role_type as roleType,
         c.role_id as roleId,
         c.role_name as roleName,
         d.id as depId,
         d.dep_name as depName
        from sys_user as a
        left join ...
        left join ...
        left join ...
        left join ...
        where a.emp_work_status = 3 and e.parent_dep_id = d.dep_code
        <if test="params.userName != null and params.userName !=''">
            and a.username like concat('%',#{params.userName},'%')
        </if>
        <if test="params.roleId != null and params.roleId !=''">
            and c.role_id = #{params.roleId}
        </if>
        <if test="params.userIds != null">
            and a.user_id in
            <foreach collection="params.userIds" separator="," open="(" close=")" item="userId">
                #{userId}
            </foreach>
        </if>
        order by a.create_time desc
    </select>

结合sql的in语句,将list映射成相应的sql语句:

user_id in
<foreach collection="params.userIds" separator="," open="(" close=")" item="userId">
                #{userId}
</foreach>

以上。


版权声明:本文为weixin_43231398原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。