昨天有同事让我帮着看一个问题,mybatis主从表联合查询,返回的对象封装集合属性。我先将出现的问题记录一下,然后再讲处理方法也简单说明一下:

VersionResult为接收返回数据对象,get\set方法我这里就省略了。

public class VersionResult extends BaseResult implements Serializable{private Integer id;private String code;@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")private Date createTimes;//记录内容表的集合对象private List<UpdateRecordEntity> UpdateRecordEntityList;}

UpdateRecordEntity为从表数据,同样get\set方法我这里就省略了。

@Table(name = "z_update_record")
public class UpdateRecordEntity extends BaseEntity {@Idprivate Integer id;@Column(name = "version_id")private Integer versionId;@Column(name = "module_name")private String moduleName;@Column(name = "update_content")private String updateContent;@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")@Column(name = "create_time")private Date createTime;@Column(name = "is_delete")private Integer isDelete;}

mapper.xml写法,这个是关键

 <!--跟新记录表封装的对象--><resultMap id="BaseResultMap" type="com.wangtiansoft.wisdomedu.persistence.result.server.VersionResult"><id column="id" property="id" jdbcType="INTEGER"/><result column="code" property="code" /><result column="create_time" property="createTimes" /><collection property="UpdateRecordEntityList" ofType="com.wangtiansoft.wisdomedu.persistence.entity.UpdateRecordEntity"><id property="id" column="id"/><result property="versionId" column="version_id"/><result property="moduleName" column="module_name"/><result property="updateContent"  column="update_content"/><result property="createTime" column="create_time"/><result property="isDelete" column="is_delete"/><result property="tenantId" column="tenant_id"/></collection></resultMap>

sql查询语句:

<select id="selectVersionList" parameterType="map" resultMap="BaseResultMap">SELECTz.`code`,z.create_time createTimes,zur.module_name moduleName,zur.update_content updateContent,zur.create_time createTimeFROMz_version zLEFT JOIN z_update_record zur ON z.id = zur.version_idWHEREz.tenant_id = #{tenantId}AND z.is_delete = 0AND z.is_disabled = 0AND zur.tenant_id = #{tenantId}AND zur.is_delete = 0AND YEAR(z.create_time)=YEAR(#{date})ORDER by z.create_time desc</select>

执行sql返回的数据:

页面调取接口,下面我将接口数据粘贴下来:

{"code": "0","msg": "","data": [{"id": null,"code": "1419","createTimes": null,"updateRecordEntityList": []}, {"id": null,"code": "开发修改1111","createTimes": null,"updateRecordEntityList": []}, {"id": null,"code": "开发修改1111","createTimes": null,"updateRecordEntityList": []}, {"id": null,"code": "开发修改1111","createTimes": null,"updateRecordEntityList": []}, {"id": null,"code": "开发修改1111","createTimes": null,"updateRecordEntityList": []}]
}

观察code、createTimes、updateRecordEntityList三个属性,会发现只有code字段有值其余的全部为null。分析这个是为啥呢?找点资料粘贴如下:

发现是sql数据和VersionResult的mapper.xml中映射关系有点问题,没有对应起来。resultMap中必须将别名和上面resultMap对的上就行,很明显sql返回数据的列明没有和resultMap一一对应起来,因此有了以下对xml文件的修改:

   <resultMap id="BaseResultMap" type="com.wangtiansoft.wisdomedu.persistence.result.server.VersionResult"><id column="id" property="id" jdbcType="INTEGER"/><result column="code" property="code" /><result column="createTimes" property="createTimes" /><collection property="UpdateRecordEntityList" ofType="com.wangtiansoft.wisdomedu.persistence.entity.UpdateRecordEntity"><id property="id" column="id"/><result property="moduleName" column="moduleName"/><result property="updateContent"  column="updateContent"/><result property="createTime" column="createTime"/></collection></resultMap>

数据显示正常:

{"code": "0","msg": "","data": [{"code": "1419","createTimes": "2019-09-02 00:00","updateRecordEntityList": [{"moduleName": "安达市大所","updateContent": "1321321","createTime": "2019-09-02 10:17"}]}, {"code": "开发修改1111","createTimes": "2019-05-07 00:00","updateRecordEntityList": [{"moduleName": "平台111111","updateContent": "平台版本第一次更新1","createTime": "2019-08-15 15:07"}]}, {"code": "开发修改1111","createTimes": "2019-05-07 00:00","updateRecordEntityList": [{"moduleName": "111","updateContent": "111","createTime": "2019-08-16 11:16"}]}, {"code": "开发修改1111","createTimes": "2019-05-07 00:00","updateRecordEntityList": [{"moduleName": "515","updateContent": "5155","createTime": "2019-08-21 17:29"}]}, {"code": "开发修改1111","createTimes": "2019-05-07 00:00","updateRecordEntityList": [{"moduleName": "2222","updateContent": "第二次更新","createTime": "2019-08-22 14:23"}]}]
}

mybatis主从表关联查询,返回对象带有集合属性相关推荐

  1. Mybatis多表关联查询(一对多关联查询)

    1.Mybatis一级缓存与二级缓存 目的:提高查询效率,降低数据库查询压力,提升系统整体性能. 一级缓存:默认开启,Session级别,同一个会话内生效. 命中缓存的情况:statementid.S ...

  2. mybatis 多表关联查询_Java修行第041天--MyBatis框架(下)--多表查询

    1 解决列名和属性名不一致问题 如果查询时使用 resultType 属性, 表示采用 MyBatis 的Auto-Mapping(自动映射)机制, 即相同的列名和属性名会自动匹配. 因此, 当数据库 ...

  3. MyBatis多表关联查询

    本文将向大家介绍 MyBatis 中的多表关联查询 主要通过两个示例来说明在 MyBatis 中如何实现 一对多,多对一 和 多对多 查询 第一个示例:老师和学生关联 ​ 老师和学生是一对多的关系,一 ...

  4. 14、mybatis多表关联查询 association定义关联对象封装规则及懒加载

    文章目录 1.使用association单步查询 1).EmployeeMapper 2).EmployeeMapper.xml 3).Test 2.使用association进行分步查询 4).De ...

  5. 13、mybatis多表关联查询级联属性

    文章目录 1.创建表结构 2.EmployeeMapper接口 3.EmployeeMapper.xml 4.Test 1.创建表结构 CREATE TABLE `mybatis`.`dept` (` ...

  6. Mybatis多表关联查询之三表查询

    在开发中经常用到多表查询,这里演示三表查询的情况. 业务逻辑:购物车订单的逻辑 该逻辑共涉及到三张表 1. order表 就是订单表 记录 订单人的信息.订单地址.订单号.订单的总价, 一条订单记录可 ...

  7. java mybtis关联查询,iBatis/MyBatis 主子表关联查询

    主表:MASTER 字段:ORDER_ID  --主键 RELATE_ID --申请单位 STOCK_ADDRESS --仓库地址 TERMINAL_VENDER --供应商 PROVINCE_ID ...

  8. MyBatis 多表关联查询

    ✅作者简介:2022年博客新星 第八.热爱国学的Java后端开发者,修心和技术同步精进.

  9. jpa多表关联查询_Spring Boot 整合mybatis如何自定义 mapper 实现多表关联查询

    上一篇文章已经介绍了自定义 mapper 实现自定义的方法,其实实现了通过自定义的mapper就可以做多表关联等复杂查询.但是很多朋友还是反馈说没有实现多表关联查询,所以,今天把文章又重新修改了,增加 ...

最新文章

  1. PCL调错:(3)error C2589“(“:“::“右边的非法标记
  2. [cocoapods]cocoapods问题解决
  3. DIY混合BCI刺激系统:SSVEP-P300 LED刺激
  4. poj 1654 Area
  5. yii2 modal弹窗之ActiveForm ajax表单异步验证
  6. (计算机组成原理)第三章存储系统-第六节2:Cache和主存的映射方式(全相联映射、直接映射和组相连映射)
  7. class.sitemap.php
  8. spyder中以html输出图形,交互(?)用matplotlib在Spyder中绘图
  9. linux学习一天一个命令(4)[mkdir命令]
  10. 数据结构(C语言版第二版)思维导图
  11. dreamweaver序列号免费_dreamweaver8【dreamweaver8序列号】dreamweaver8注册码序列号简体中文版...
  12. 分享typecho博客的Next主题包
  13. 【渝粤教育】广东开放大学 建筑工程计量与计价 形成性考核 (47)
  14. android n sdk,Android SDK (phần 6) pptx
  15. 2014网络红人照片网络红人排行榜2014经典语录网络红人斌少
  16. error “download token not specified“
  17. 深入了解scratch中的“移动10步”和(你真的了解scratch吗?scratch初学者值得一看)
  18. 旧安卓手机|简洁日历APP
  19. JqGrid知识总结
  20. H5嵌入APP的联合登录的解决方案

热门文章

  1. 图书速读 | 一分钟读完《考试脑科学》
  2. OLED液晶显示屏显示汉字
  3. 使用apipost模拟手机实现请求发送
  4. 区块链加速实现普惠金融
  5. 历史上的三次数学危机
  6. Visual C++从入门到精通(第3版)光盘
  7. 后浪程序猿 996 摸鱼求生指南
  8. mysqld --initialize 没有反应_铁道物语:陆王--出场惊艳,玩法磨人
  9. java性能实战_【从零单排】Java性能排查实战模拟
  10. 负数分解质因数java_Java分解质因数