需求:根据角色id,返回角色名称,
入参是List<List> 类型的二维数组,需要返回一个对应的集合,集合的元素是逗号分隔的字符串。
dao层代码:

List<String> queryRoleName(List<List<Long>> list);

mapper代码:

<select id="queryRoleName" parameterType="java.util.List" resultType="string">
        <foreach collection="list" item="item" separator="union all">
            select ifnull(group_concat(role_name),'') roleName from sys_role where role_id in
            <if test="item!=null and item.size()>0">
                /*就像java for循环嵌套一样,外层的item的属性值和内层的collection属性值需要保持一致*/
                <foreach collection="item" item="roleId" separator="," open="(" close=")">
                    #{roleId}
                </foreach>
            </if>
            <if test="item==null">
                (null)
            </if>
        </foreach>
</select>

说明:
1、因为这里业务需求,可能出现传参角色id为null的情况,所以加了if动态标签判断item元素是否为空,并对返回结果的null值,用mysql的ifnull,对null转了空字符串处理
2、逗号分隔分组函数 group_concat()

效果:
入参:
{{null},{1,2},…}
sql解析:

select ifnull(GROUP_CONCAT(role_name),'') roleName from sys_role where role_id in(null)
union all select ifnull(GROUP_CONCAT(role_name),'') roleName from sys_role where role_id in(1,2)
union all ......

查询结果:
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐