这篇文章主要介绍了mybatis in foreach双层嵌套问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mybatis in foreach双层嵌套问题怎么解决文章都会有所收获,下面我们一起来看看吧。
mybatis in foreach 双层嵌套
需求:根据角色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"> <foreach collection="item" item="roleId" separator="," open="(" close=")"> #{roleId} </foreach> </if> <if test="item==null"> (null) </if> </foreach></select>
说明:
因为这里业务需求,可能出现传参角色id为null的情况,所以加了if动态标签判断item元素是否为空,并对返回结果的null值,用mysql的ifnull,对null转了空字符串处理
逗号分隔分组函数 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 ......
查询结果:
mybatis foreach标签进行嵌套插入
场景说明
现有一插入操作,要求按照指定格式进行插入操作。具体格式如下:
上面各对象中对应的表字段:
处理过程
第一层实体类:
public class StudioCourseAddUpdateDto implements Serializable { private static final long serialVersionUID = 4862281856286977081L; private int studioId; private List<CourseInfoDto> courseInfoDtoList; // 省略get/set}
第二层实体类:
public class CourseInfoDto implements Serializable { private static final long serialVersionUID = -2975706030949793781L; private int courseType; private List<CourseDetailInfoDto> courseDetailInfoDtoList;// 省略get/set}
第三层实体类:
public class CourseDetailInfoDto implements Serializable { private static final long serialVersionUID = -1423166674509217993L; private int courseId; private String feeCount; // 省略get/set}
mapper接口:
int bathAddStudioCourseInfo(@Param("studioCourseAddUpdateDtoList") List<courseAddUpdateDto> courseAddUpdateDtoList);
配置文件:
<insert id="bathAddStudioCourseInfo" parameterType="com.it.tao.CourseAddUpdateDto"> <foreach collection="courseAddUpdateDtoList" item="courseAddUpdateDto" > <foreach collection="courseAddUpdateDto.courseInfoDtoList" item="courseInfoDto" > <foreach collection="courseInfoDto.courseDetailInfoDtoList" item="courseDetailInfoDto" > INSERT INTO card_course (course_id,studio_id,course_type,fee_count) VALUES (#{courseDetailInfoDto.courseId},#{courseAddUpdateDto.studioId},#{courseInfoDto.courseType},#{courseDetailInfoDto.feeCount}); </foreach> </foreach> </foreach></insert>
关于“mybatis in foreach双层嵌套问题怎么解决”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“mybatis in foreach双层嵌套问题怎么解决”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。