mybatis in foreach双层嵌套问题怎么解决
mybatis in foreach 双层嵌套
需求:根据角色id,返回角色名称,
入参是List 类型的二维数组,需要返回一个对应的集合,集合的元素是逗号分隔的字符串。
dao层代码:
ListqueryRoleName(List > list);
mapper代码:
说明:
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 ......
查询结果:

mybatis foreach标签进行嵌套插入
场景说明
现有一插入操作,要求按照指定格式进行插入操作。具体格式如下:

上面各对象中对应的表字段:

处理过程
第一层实体类:
public class StudioCourseAddUpdateDto implements Serializable {
private static final long serialVersionUID = 4862281856286977081L;
private int studioId;
private List courseInfoDtoList;
// 省略get/set
} 第二层实体类:
public class CourseInfoDto implements Serializable {
private static final long serialVersionUID = -2975706030949793781L;
private int courseType;
private List 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 courseAddUpdateDtoList); 配置文件:
INSERT INTO card_course (course_id,studio_id,course_type,fee_count) VALUES (#{courseDetailInfoDto.courseId},#{courseAddUpdateDto.studioId},#{courseInfoDto.courseType},#{courseDetailInfoDto.feeCount});