mybatis in foreach 双层嵌套问题

作者:回首掏88 时间:2023-11-24 12:55:47 

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">
               /*就像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},&hellip;}

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 in foreach 双层嵌套问题

mybatis foreach标签进行嵌套插入

场景说明

现有一插入操作,要求按照指定格式进行插入操作。具体格式如下:

mybatis in foreach 双层嵌套问题

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

mybatis in 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>

来源:https://blog.csdn.net/weixin_41650051/article/details/115696849

标签:mybatis,in,foreach,双层嵌套
0
投稿

猜你喜欢

  • Android如何使用Bmob后端云实现失物招领功能

    2023-10-15 07:28:05
  • springBoot加入thymeleaf模板的方式

    2023-11-25 14:31:23
  • kafka并发写大消息异常TimeoutException排查记录

    2023-11-27 23:07:11
  • java实现简单的英文文本单词翻译器功能示例

    2023-11-28 10:22:15
  • Java动态规划之硬币找零问题实现代码

    2023-01-23 20:37:38
  • C#中异步回调函数用法实例

    2023-01-05 13:10:53
  • 关于Flyweight模式应用实践的相关介绍

    2021-07-28 21:50:34
  • Android开发导入项目报错Ignoring InnerClasses attribute for an anonymous inner class的解决办法

    2023-05-16 13:02:45
  • C#中将DataTable转化成List<T>的方法解析

    2023-02-06 23:20:39
  • Android调试出现The selected device is incompatible问题解决

    2023-08-11 12:58:34
  • Java 合并多个MP4视频文件

    2022-08-23 12:09:19
  • Unity使用鼠标旋转物体效果

    2021-10-17 05:08:12
  • Android仿微信语音对讲录音功能

    2021-10-12 22:13:36
  • java 微信随机红包算法代码实例

    2022-12-03 12:29:08
  • Unity3D实现控制摄像机移动

    2022-06-23 20:44:04
  • Android实现excel/pdf/word/odt/图片相互转换

    2021-12-05 23:08:16
  • Springmvc ResponseBody响应json数据实现过程

    2022-06-12 15:22:30
  • java中unicode和中文相互转换的简单实现

    2021-12-18 09:46:17
  • Java编程中使用XFire框架调用WebService程序接口

    2023-11-06 20:16:33
  • SpringBoot中使用JeecgBoot的Autopoi导出Excel的方法步骤

    2023-03-31 03:38:11
  • asp之家 软件编程 m.aspxhome.com