当前位置: 首页 > news >正文

MyBatis踩坑记录-多表关联字段相同,字段数据覆盖问题

MyBatis踩坑记录-多表关联字段相同,字段数据覆盖问题

  • 1. 背景描述
  • 2. 实体记录
  • 3. 错误映射
    • 3.1 造成的影响
  • 4. 解决办法
    • 4.1 修改映射文件
  • 5. 修复后的效果
    • 5.1 返回的数据
    • 5.2 正确展示
  • 7. end ~

1. 背景描述

现有一下业务,单个任务下可能会有多个子任务,现将通过关联查询将子任务放在单个任务下,类似于这样的数据结构:

{"task": {"id": "1","name": "a","createTime": "2024-07-03 17:15:00"},"info": [{"id": "01","name": "aa","createTime": "2024-07-03 17:15:00"},{"id": "001","name": "aaa","createTime": "2024-07-03 17:15:00"},{"id": "0001","name": "aaaa","createTime": "2024-07-03 17:15:00"}]
}

2. 实体记录

public class TaskInfoVO {private TaskDO task;private List<SubTaskInfo> subTaskInfos;
}/*** 任务总表* @TableName task_list*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TaskDO implements Serializable {private Long id;private String name;private Date createTime;private static final long serialVersionUID = 1L;
}/*** 子任务* @TableName task_list*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.ALWAYS)
public class SubTaskInfo implements Serializable {private Long id = 0L;private String name;private Date createTime;private static final long serialVersionUID = 1L;

3. 错误映射


<resultMap id="TaskInfoVOMap" type="com.iqiyi.auto.module.heal.controller.VO.TaskInfoVO"><association property="task" javaType="com.iqiyi.auto.module.heal.DO.TaskDO"><id property="id" column="id" jdbcType="BIGINT"/><result property="name" column="name" jdbcType="VARCHAR"/><result property="createTime" column="create_time" jdbcType="TIMESTAMP"/></association><collection property="subTaskInfos" ofType="com.iqiyi.auto.module.heal.DTO.SubTaskInfo" notNullColumn="id"><id property="id" column="id" jdbcType="BIGINT"/><result property="name" column="name" jdbcType="VARCHAR"/><result property="createTime" column="create_time" jdbcType="TIMESTAMP"/></collection></resultMap>

3.1 造成的影响

错误图片

4. 解决办法

4.1 修改映射文件


<resultMap id="TaskInfoVOMap" type="com.iqiyi.auto.module.heal.controller.VO.TaskInfoVO"><association property="task" javaType="com.iqiyi.auto.module.heal.DO.TaskDO"><id property="id" column="id" jdbcType="BIGINT"/><result property="name" column="task_name" jdbcType="VARCHAR"/><result property="createTime" column="create_time" jdbcType="TIMESTAMP"/></association><collection property="subTaskInfos" ofType="com.iqiyi.auto.module.heal.DTO.SubTaskInfo" notNullColumn="id"><id property="id" column="id_sub" jdbcType="BIGINT"/><result property="name" column="name_sub" jdbcType="VARCHAR"/><result property="createTime" column="create_time_sub" jdbcType="TIMESTAMP"/></collection></resultMap>

5. 修复后的效果

5.1 返回的数据

修复后的截图

5.2 正确展示

正确展示

7. end ~

一天上一当,当当不一样,坑坑多多

http://www.lryc.cn/news/390470.html

相关文章:

  • 昇思25天学习打卡营第6天|数据变换 Transforms
  • 在线JSON可视化工具--改进
  • 探讨命令模式及其应用
  • 1、音视频解封装流程---解复用
  • centos7升级gcc到7.3.0
  • 系统运维面试题总结(网络基础类)
  • PO模式登录测试
  • X86 +PC104+支持WinCE5.0,WinCE6.0,DOS,WinXP, QNX等操作系统,工业控制数据采集核心模块板卡定制
  • 视频监控汇聚和融合平台的特点、功能、接入方式、应用场景
  • 实习总结 --- 其他业务
  • 2024年上半年典型网络攻击事件汇总
  • Ozon、美客多补单测评黑科技:打造无懈可击的自养号补单环境
  • ES报错:解决too_many_clauses: maxClauseCount is set to 1024 报错问题
  • 完全指南:在Linux上安装和精通Conda
  • # linux 系统中,使用 “ ll “ 命令报错 “ bash ll command not found “ 解决方法:
  • 吴恩达深度学习笔记:机器学习策略(2)(ML Strategy (2)) 2.3-2.4
  • 【软件测试】快速定位bug,编写测试用例
  • 升级springboot3
  • 视频编解码从H.264到H.266:浅析GB28181安防视频汇聚EasyCVR视频压缩技术
  • vue项目访问 域名/index.html 空页面问题
  • 区块链开发入门:基础概念与实施技术详解
  • Rust破界:前端革新与Vite重构的深度透视(下)
  • Android 解决 “Module was compiled with an incompatible version of Kotlin“ 问题
  • linux nfs的使用
  • eclipse断点调试(用图说话)
  • vue的学习--day2
  • html + css 快速实现订单详情的布局demo
  • 居然这么简单就能实现扫雷游戏!
  • 安装Gitlab+Jenkins
  • php 命令行模式详解