mybatis in foreach 雙層嵌套問題
mybatis in foreach 雙層嵌套
需求:根據(jù)角色id,返回角色名稱,
入?yún)⑹荓ist<List> 類型的二維數(shù)組,需要返回一個對應的集合,集合的元素是逗號分隔的字符串。
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循環(huán)嵌套一樣,外層的item的屬性值和內層的collection屬性值需要保持一致*/
<foreach collection="item" item="roleId" separator="," open="(" close=")">
#{roleId}
</foreach>
</if>
<if test="item==null">
(null)
</if>
</foreach>
</select>說明:
1、因為這里業(yè)務需求,可能出現(xiàn)傳參角色id為null的情況,所以加了if動態(tài)標簽判斷item元素是否為空,并對返回結果的null值,用mysql的ifnull,對null轉了空字符串處理
2、逗號分隔分組函數(shù) group_concat()
效果:
入?yún)ⅲ?/strong>
{{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標簽進行嵌套插入
場景說明
現(xiàn)有一插入操作,要求按照指定格式進行插入操作。具體格式如下:

上面各對象中對應的表字段:

處理過程
第一層實體類:
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>
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot之整合MyBatis實現(xiàn)CRUD方式
這篇文章主要介紹了SpringBoot之整合MyBatis實現(xiàn)CRUD方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
Jackson將json string轉為Object,org.json讀取json數(shù)組的實例
下面小編就為大家?guī)硪黄狫ackson將json string轉為Object,org.json讀取json數(shù)組的實例,具有很好的參考價值,希望對大家有所幫助2017-12-12
SpringBoot+Dubbo+Zookeeper實現(xiàn)簡單分布式開發(fā)的應用詳解
這篇文章主要介紹了SpringBoot+Dubbo+Zookeeper實現(xiàn)簡單分布式開發(fā)的應用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01
Spring Boot中集成各種日志框架Logback、Log4j2和Java Util
這篇文章主要介紹了Spring Boot中集成各種日志框架Logback、Log4j2和Java Util Logging,通過實例代碼介紹了集成Logback、Log4j2和Java Util Logging的基本步驟,你可以根據(jù)自己的需求進行配置和擴展,以滿足更復雜的日志需求,需要的朋友可以參考下2023-11-11

