问题背景

主要用到了associationcollection的关联的嵌套 Select 查询

最终返回VO实体

@Data
@ApiModel(description = "智能名片 模板数据")
public class BizCardTemplateVO {@ApiModelProperty("模板id")private Integer id;@ApiModelProperty("模板名称")private String templateName;@ApiModelProperty("员工信息")private BizCardEmpInfoVO empVO;}

内嵌实体

@Data
@ApiModel("模板-员工信息")
public class BizCardEmpInfoVO {@ApiModelProperty("1启用 0隐藏")private boolean status;@ApiModelProperty("员工信息")private List<EmpInfo> empInfos;@Data@ApiModel("员工信息")public static class EmpInfo {@ApiModelProperty("id")private Integer id;@ApiModelProperty("标签内容")private String label;@ApiModelProperty("1选中 0未选中")private boolean selected;@ApiModelProperty("属性名称,用于h5判断字段使用")private String fieldName;@ApiModelProperty("用于h5端信息展示")private String fieldValue;}}

主表结构

CREATE TABLE `operate_workchat_biz_card_template` (`id` int(10) NOT NULL AUTO_INCREMENT,`corp_id` int(11) DEFAULT NULL COMMENT 'corp.id',`template_name` varchar(64) DEFAULT NULL COMMENT '模板名称',`emp_template_id` int(10) DEFAULT NULL COMMENT 'operate_workchat_biz_card_emp_template.id',`biz_template_id` int(10) DEFAULT NULL COMMENT 'operate_workchat_biz_card_template.id'PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='智能名片模板';

从表结构

CREATE TABLE `operate_workchat_biz_card_emp_template` (`id` int(10) NOT NULL AUTO_INCREMENT,`corp_id` int(11) DEFAULT NULL COMMENT 'corp.id',`pid` varchar(64) DEFAULT NULL COMMENT '父id',`label` varchar(64) DEFAULT NULL COMMENT '标签内容',`selected` tinyint(1) DEFAULT '0' COMMENT '是否选中',`field_name` varchar(16) DEFAULT NULL COMMENT '属性名称,用于h5判断字段使用',`field_value` varchar(32) DEFAULT NULL COMMENT '用于h5端信息展示',`status` tinyint(1) DEFAULT NULL COMMENT '1启用 0隐藏,这个字段pid=0的能用得着',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COMMENT='智能名片模板-员工信息模板';

期待返回结果

{"id": 1,"templateName": "默认模板","empVO": {"status": true,"empInfos": [{"id": 2,"label": "头像","selected": true,"fieldName": "avatar","fieldValue": null}]}
}

我想通过select嵌套查询返回期待结果,就有了以下xml内容

 <select id="getTemplateData" resultMap="templateDataResultMap">select id, template_name, emp_template_idfrom operate_workchat_biz_card_templatewhere id = #{templateId} and corp_id = #{corpId}</select><select id="selectEmp" resultMap="empResult" >select id as emp_id,pid,label,selected,field_name,field_value,status from operate_workchat_biz_card_emp_template where id = #{id}
</select><select id="selectEmpList" resultType="cn.zalldigital.data.scrm.web.workchat.pojo.vo.BizCardEmpInfoVO$EmpInfo">select id,label,selected,field_name,field_value from operate_workchat_biz_card_emp_template where pid = #{id}
</select><resultMap id="empResult" type="cn.zalldigital.data.scrm.web.workchat.pojo.vo.BizCardEmpInfoVO"><result column="status" property="status"/>
</resultMap><resultMap id="templateDataResultMap" type="cn.zalldigital.data.scrm.web.workchat.pojo.vo.BizCardTemplateVO"><id column="id" property="id"/><result column="template_name" property="templateName"/><association property="empVO" column="emp_template_id" select="selectEmp" javaType="cn.zalldigital.data.scrm.web.workchat.pojo.vo.BizCardEmpInfoVO"  ><result column="status" property="status"/><collection property="empInfos" column="emp_id" select="selectEmpList"  ofType="cn.zalldigital.data.scrm.web.workchat.pojo.vo.BizCardEmpInfoVO$EmpInfo"><id column="id" property="id"/><result column="label" property="label"/><result column="selected" property="selected"/><result column="field_name" property="fieldName"/><result column="field_value" property="fieldValue"/></collection></association>
</resultMap>

当时想法很简单,想通过selectEmp获取到statusemp_id,然后将emp_id通过colum传递给selectEmpList进而获取到一个集合。但是操作了很久collection标签的内容都不会执行。。
实际返回结果

{"id": 1,"templateName": "默认模板","empVO": {"status": true,"empInfos": null}
}

解决方法

因为我这里使用到了association的关联的嵌套 Select 查询,所以association的结果都要放到对应的select的结果集中取处理!!!

避免association嵌套collection,将collection的处理直接放到selectEmp的结果集中去处理

<select id="getTemplateData" resultMap="templateDataResultMap">select id, template_name, emp_template_idfrom operate_workchat_biz_card_templatewhere id = #{templateId} and corp_id = #{corpId}</select><select id="selectEmp" resultMap="empResult" >select id as emp_id,pid,label,selected,field_name,field_value,status from operate_workchat_biz_card_emp_template where id = #{id}
</select><select id="selectEmpList" resultType="cn.zalldigital.data.scrm.web.workchat.pojo.vo.BizCardEmpInfoVO$EmpInfo">select id,label,selected,field_name,field_value from operate_workchat_biz_card_emp_template where pid = #{id}
</select><resultMap id="empResult" type="cn.zalldigital.data.scrm.web.workchat.pojo.vo.BizCardEmpInfoVO"><result column="status" property="status"/><collection property="empInfos" column="emp_id" select="selectEmpList"  ofType="cn.zalldigital.data.scrm.web.workchat.pojo.vo.BizCardEmpInfoVO$EmpInfo"><id column="id" property="id"/><result column="label" property="label"/><result column="selected" property="selected"/><result column="field_name" property="fieldName"/><result column="field_value" property="fieldValue"/></collection>
</resultMap><resultMap id="templateDataResultMap" type="cn.zalldigital.data.scrm.web.workchat.pojo.vo.BizCardTemplateVO"><id column="id" property="id"/><result column="template_name" property="templateName"/><association property="empVO" column="emp_template_id" select="selectEmp" javaType="cn.zalldigital.data.scrm.web.workchat.pojo.vo.BizCardEmpInfoVO"/>
</resultMap>

mybatis association内嵌collection踩坑相关推荐

  1. 内网穿透,使用 IPv6 公网访问内网设备踩坑指南

    本文是开启宽带 IPv6 功能并使用公网 IPv6 地址访问内网设备的踩坑指南.IPv6 是目前个人体验最优的内网访问方案,个人体验远胜过 ZeroTier,frp 等方案. 场景 将个人设备暴露于公 ...

  2. mybatis 自动填充无效_mybatisPlus踩坑之--自动填充

    这两天在做接口,数据库层采用的是mubatisPlus,在插入数据时,正常逻辑是只是插入create等信息,但是updateTime也自动插入.琢磨了两个小时,还是没找到问题所在,避免影响工期,最后手 ...

  3. 微信小程序使用web-view,内嵌跳转h5踩坑记!!

    先说说我遇到的错误,项目在部署测试环境之前一切正常,没有遇到任何阻碍性bug,但是部署测试环境之后,跳转h5报如下错误: 然后我就去查了官方文档,以及各类技术文档,意思就是需要在微信公众平台配置业务域 ...

  4. mybatis学习与踩坑记录

    mybatis resultmap高级映射 应用场景:如果sql查询的列名和pojo的属性名不一致,可以使用resultMap将列名和pojo的属性名作一个对应关系,就可以映射成功了.(如果返回值为i ...

  5. mybatis mapper.xml dtd_全栈开发踩坑之路4-用MyBatis实现服务

    1.前言 上一篇文章介绍了如何设计后端的Mysql数据库:Alex Wang:全栈开发踩坑之路3-MySql数据库设计,本文介绍如何用MyBatis实现后端服务. 本后端项目的Github地址(撰写中 ...

  6. app怎么嵌套vue页面_app内嵌vue单页面应用的一些坑

    写这篇文章的原因是想总结一下自己最近开发的一个内嵌app的vue单页面项目,看看有哪些坑!!! 1.白屏 项目第一次上线正常 项目第二次上线,20多个用户反馈白屏(没见过这世面,心里慌的不行!!!), ...

  7. mybatis 配置文件中,collection 和 association 的对应关系

    mybatis 配置文件中,collection 和 association 的对应关系  如下图所示:

  8. 【群晖NAS】真·免费内网穿透方案 及踩坑合集

    一.介绍 一篇科普贴,帮助那些刚入门NAS的朋友尽量避免踩坑.因为本人实践了其中几种穿透方案,也积攒了一些经验,跟大家分享一下. 在这里想说一句,现在网上充斥着各种<内网穿透方案对比>,可 ...

  9. Smb协议实现内网共享目录文件处理及踩坑记录

    Smb协议实现内网共享目录文件处理及踩坑记录 一.业务场景 公司内网环境,有部分比较古老的业务数据保存在一台windows服务器的共享目录里面.现在需要操作这个windows服务器的共享目录来上传下载 ...

最新文章

  1. 网站信息统计的简单实现过程
  2. day17(JDBC入门jdbcUtils工具介绍)
  3. 如何查看mysql8.0的默认密码_MySQL8.0安装之后查找默认密码
  4. 再谈拍照,OPPO这次拿什么和iPhone7拼?
  5. windows7计算机管理,windows7计算机管理
  6. mongodb 导出一条数据_将 MongoDB 导出成 csv
  7. 22.Linux/Unix 系统编程手册(上) -- 信号:高级特性
  8. 阿里云市场联合犀思云开启云V认证 首推“严选”模式企业采购更安心
  9. PLC编程:梯形图的转换设计法
  10. 如何制作伪原创视频?呆头鹅批量视频剪辑软件一键处理10万个视频
  11. 企业公众号如何申请开通模板消息功能?
  12. POJ - 1179
  13. 如何 运行WRF模型 天气预报 数据后处理
  14. Air Jordan 32 Performance Review
  15. 郑州73中学计算机老师,关于“郑州市中学信息技术优质课评比”的通知
  16. 数据分析36计(22):分析师入门常见错误 幸存者偏差,如何用匹配和加权法规避...
  17. 非凡网络 最新钓鱼程序 最新钓鱼源码 QQ空间钓鱼源码 淘宝钓鱼源码 ff999.cn
  18. 使用Certify申请Lets Encrype通配符SSL证书
  19. 九九八十一难|R一步安装TSA包
  20. 最长对称子串(用各个字符确定对称轴进行判断)

热门文章

  1. 高度仿PC版《微信读书》,好看的小说、读书网站
  2. 北航研究生计算机网络实验报告,实验7_北航研究生计算机网络实验
  3. SAP中状态参数文件最高状态和最低状态的理解
  4. 酒店管理系统的E-R图和数据库模型图
  5. Spark中repartition和coalesce的用法
  6. Apache源码安装和虚拟主机配置
  7. matlab java堆内存溢出,matlab内存溢出的解决方案
  8. 初级者与转行者,大数据如何学习最高效,简历该如何优化?
  9. java大数据量调优(超赞值得收藏)
  10. 自媒体时代如何做好软文推广?