mybatis in foreach 雙層嵌套問題
mybatis in foreach 雙層嵌套
需求:根據(jù)角色id,返回角色名稱,
入?yún)⑹荓ist<List> 類型的二維數(shù)組,需要返回一個(gè)對(duì)應(yīng)的集合,集合的元素是逗號(hào)分隔的字符串。
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的屬性值和內(nèi)層的collection屬性值需要保持一致*/ <foreach collection="item" item="roleId" separator="," open="(" close=")"> #{roleId} </foreach> </if> <if test="item==null"> (null) </if> </foreach> </select>
說明:
1、因?yàn)檫@里業(yè)務(wù)需求,可能出現(xiàn)傳參角色id為null的情況,所以加了if動(dòng)態(tài)標(biāo)簽判斷item元素是否為空,并對(duì)返回結(jié)果的null值,用mysql的ifnull,對(duì)null轉(zhuǎn)了空字符串處理
2、逗號(hào)分隔分組函數(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 ......
查詢結(jié)果:
mybatis foreach標(biāo)簽進(jìn)行嵌套插入
場(chǎng)景說明
現(xiàn)有一插入操作,要求按照指定格式進(jìn)行插入操作。具體格式如下:
上面各對(duì)象中對(duì)應(yīng)的表字段:
處理過程
第一層實(shí)體類:
public class StudioCourseAddUpdateDto implements Serializable { private static final long serialVersionUID = 4862281856286977081L; private int studioId; private List<CourseInfoDto> courseInfoDtoList; // 省略get/set }
第二層實(shí)體類:
public class CourseInfoDto implements Serializable { private static final long serialVersionUID = -2975706030949793781L; private int courseType; private List<CourseDetailInfoDto> courseDetailInfoDtoList; // 省略get/set }
第三層實(shí)體類:
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>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot集成PostgreSQL并設(shè)置最大連接數(shù)
本文主要介紹了SpringBoot集成PostgreSQL并設(shè)置最大連接數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11springBoot啟動(dòng)報(bào)錯(cuò)log4j沖突的解決方案
這篇文章主要介紹了springBoot啟動(dòng)報(bào)錯(cuò)log4j沖突的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2021-07-07spring簡(jiǎn)單MVC實(shí)現(xiàn)方法(URL映射及其參數(shù)使用、查詢(id、其他參數(shù))、增加)
這篇文章主要介紹了spring簡(jiǎn)單MVC實(shí)現(xiàn)方法(URL映射及其參數(shù)使用、查詢(id、其他參數(shù))、增加),方法參數(shù)使用包括在無注解下獲取參數(shù),使用@RequestParam 獲取參數(shù)的方法,每種方法講解的非常詳細(xì),需要的朋友可以參考下2024-01-01Java數(shù)據(jù)長(zhǎng)度獲取方式對(duì)比之length屬性、length()和size()方法詳解
在Java編程語言中l(wèi)ength、length()和size()是三個(gè)常見的用來獲取不同數(shù)據(jù)類型對(duì)象長(zhǎng)度或大小的方法,但它們各自適用于不同的上下文,這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)長(zhǎng)度獲取方式對(duì)比之length屬性、length()和size()方法詳解2024-07-07Java數(shù)據(jù)結(jié)構(gòu)之稀疏矩陣定義與用法示例
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之稀疏矩陣定義與用法,結(jié)合實(shí)例形式分析了java稀疏矩陣的定義、運(yùn)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01IntelliJ IDEA失焦自動(dòng)重啟服務(wù)的解決方法
在使用 IntelliJ IDEA運(yùn)行 SpringBoot 項(xiàng)目時(shí),你可能會(huì)遇到一個(gè)令人困擾的問題,一旦你的鼠標(biāo)指針離開當(dāng)前IDE窗口,點(diǎn)擊其他位置時(shí), IDE 窗口會(huì)失去焦點(diǎn),你的 SpringBoot 服務(wù)就會(huì)自動(dòng)重啟,所以本文給大家介紹了IntelliJ IDEA失焦自動(dòng)重啟服務(wù)的解決方法2023-10-10Spring Boot實(shí)現(xiàn)動(dòng)態(tài)更新任務(wù)的方法
這篇文章主要介紹了Spring Boot實(shí)現(xiàn)動(dòng)態(tài)更新任務(wù)的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對(duì)大家學(xué)習(xí)使用Spring Boot動(dòng)態(tài)更新任務(wù)具有一定的參考價(jià)值,需要的朋友們來一起看看吧。2017-04-04