mybatis主从表关联查询,返回对象带有集合属性
昨天有同事让我帮着看一个问题,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主从表关联查询,返回对象带有集合属性相关推荐
- Mybatis多表关联查询(一对多关联查询)
1.Mybatis一级缓存与二级缓存 目的:提高查询效率,降低数据库查询压力,提升系统整体性能. 一级缓存:默认开启,Session级别,同一个会话内生效. 命中缓存的情况:statementid.S ...
- mybatis 多表关联查询_Java修行第041天--MyBatis框架(下)--多表查询
1 解决列名和属性名不一致问题 如果查询时使用 resultType 属性, 表示采用 MyBatis 的Auto-Mapping(自动映射)机制, 即相同的列名和属性名会自动匹配. 因此, 当数据库 ...
- MyBatis多表关联查询
本文将向大家介绍 MyBatis 中的多表关联查询 主要通过两个示例来说明在 MyBatis 中如何实现 一对多,多对一 和 多对多 查询 第一个示例:老师和学生关联 老师和学生是一对多的关系,一 ...
- 14、mybatis多表关联查询 association定义关联对象封装规则及懒加载
文章目录 1.使用association单步查询 1).EmployeeMapper 2).EmployeeMapper.xml 3).Test 2.使用association进行分步查询 4).De ...
- 13、mybatis多表关联查询级联属性
文章目录 1.创建表结构 2.EmployeeMapper接口 3.EmployeeMapper.xml 4.Test 1.创建表结构 CREATE TABLE `mybatis`.`dept` (` ...
- Mybatis多表关联查询之三表查询
在开发中经常用到多表查询,这里演示三表查询的情况. 业务逻辑:购物车订单的逻辑 该逻辑共涉及到三张表 1. order表 就是订单表 记录 订单人的信息.订单地址.订单号.订单的总价, 一条订单记录可 ...
- java mybtis关联查询,iBatis/MyBatis 主子表关联查询
主表:MASTER 字段:ORDER_ID --主键 RELATE_ID --申请单位 STOCK_ADDRESS --仓库地址 TERMINAL_VENDER --供应商 PROVINCE_ID ...
- MyBatis 多表关联查询
✅作者简介:2022年博客新星 第八.热爱国学的Java后端开发者,修心和技术同步精进.
- jpa多表关联查询_Spring Boot 整合mybatis如何自定义 mapper 实现多表关联查询
上一篇文章已经介绍了自定义 mapper 实现自定义的方法,其实实现了通过自定义的mapper就可以做多表关联等复杂查询.但是很多朋友还是反馈说没有实现多表关联查询,所以,今天把文章又重新修改了,增加 ...
最新文章
- PCL调错:(3)error C2589“(“:“::“右边的非法标记
- [cocoapods]cocoapods问题解决
- DIY混合BCI刺激系统:SSVEP-P300 LED刺激
- poj 1654 Area
- yii2 modal弹窗之ActiveForm ajax表单异步验证
- (计算机组成原理)第三章存储系统-第六节2:Cache和主存的映射方式(全相联映射、直接映射和组相连映射)
- class.sitemap.php
- spyder中以html输出图形,交互(?)用matplotlib在Spyder中绘图
- linux学习一天一个命令(4)[mkdir命令]
- 数据结构(C语言版第二版)思维导图
- dreamweaver序列号免费_dreamweaver8【dreamweaver8序列号】dreamweaver8注册码序列号简体中文版...
- 分享typecho博客的Next主题包
- 【渝粤教育】广东开放大学 建筑工程计量与计价 形成性考核 (47)
- android n sdk,Android SDK (phần 6) pptx
- 2014网络红人照片网络红人排行榜2014经典语录网络红人斌少
- error “download token not specified“
- 深入了解scratch中的“移动10步”和(你真的了解scratch吗?scratch初学者值得一看)
- 旧安卓手机|简洁日历APP
- JqGrid知识总结
- H5嵌入APP的联合登录的解决方案