技术标签: mybatis 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 {
@Id
private 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">
SELECT
z.`code`,
z.create_time createTimes,
zur.module_name moduleName,
zur.update_content updateContent,
zur.create_time createTime
FROM
z_version z
LEFT JOIN z_update_record zur ON z.id = zur.version_id
WHERE
z.tenant_id = #{tenantId}
AND z.is_delete = 0
AND z.is_disabled = 0
AND zur.tenant_id = #{tenantId}
AND zur.is_delete = 0
AND 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"
}]
}]
}
文章浏览阅读6.9k次。WCE 下载地址:链接:https://share.weiyun.com/5MqXW47 密码:bdpqku工具界面_wce.exe -s aaa:win-9r7tfgsiqkf:00000000000000000000000000000000:a658974b892e
文章浏览阅读4.5k次。Weather Globe(Mackiev)Google Earth(Google)Virtual Earth(Microsoft)World Wind(NASA)Skyline Globe(Skylinesoft)ArcGISExplorer(ESRI)国内LTEarth(灵图)、GeoGlobe(吉奥)、EV-Globe(国遥新天地) 软件名称: 3D Weather Globe(http:/_网络地球仪
文章浏览阅读1.9w次,点赞113次,收藏57次。我要买这些东西,然后震惊整个办公室_程序员展示刀,产品经理展示枪
文章浏览阅读1.6w次,点赞7次,收藏63次。霍尔信号、编码器信号与电机转向从电机出轴方向看去,电机轴逆时针转动,霍尔信号的序列为编码器信号的序列为将霍尔信号按照H3 H2 H1的顺序组成三位二进制数,则霍尔信号翻译成状态为以120°放置霍尔为例如不给电机加电,使用示波器测量三个霍尔信号和电机三相反电动势,按照上面所说的方向用手转动电机得到下图① H1的上升沿对应电机q轴与H1位置电角度夹角为0°,..._霍尔信号
文章浏览阅读7.1k次,点赞5次,收藏36次。个人微信淘宝客返利机器人搭建一篇教程全搞定天猫淘宝有优惠券和返利,仅天猫淘宝每年返利几十亿,你知道么?技巧分享:在天猫淘宝京东拼多多上挑选好产品后,按住标题文字后“复制链接”,把复制的淘口令或链接发给机器人,复制机器人返回优惠券口令或链接,再打开天猫或淘宝就能领取优惠券啦下面教你如何搭建一个类似阿可查券返利机器人搭建查券返利机器人前提条件1、注册微信公众号(订阅号、服务号皆可)2、开通阿里妈妈、京东联盟、拼多多联盟一、注册微信公众号https://mp.weixin.qq.com/cgi-b_怎么自己制作返利机器人
文章浏览阅读2.1k次,点赞2次,收藏5次。技术分享时应秉持的基本原则:应有团队和个人、奉献者(统筹人)的概念,同时匹配团队激励、个人激励和最佳奉献者激励;团队应该打开工作内容边界,成员应该来自各内容方向;评分标准不应该过于模糊,否则没有意义,应由客观的基础分值以及分团队的主观综合结论得出。应有心愿单激励机制,促进大家共同聚焦到感兴趣的事情上;选题应有规范和框架,具体到某个小类,这样收获才有目标性,发布分享主题时大家才能快速判断是否是自己感兴趣的;流程和分享的模版应该有固定范式,避免随意的格式导致随意的内容,评分也应该部分参考于此;参会原则,应有_技术分享
文章浏览阅读1k次。在模板中,我们使用了标签,将由o2-view组件负责渲染,给o2-view传入了两个参数:app="内容管理数据"和name="所有信息",我们将在o2-view组件中使用这两个参数,用于展现“内容管理数据”这个数据应用下的“所有信息”视图。在o2-view组件中,我们主要做的事是,在vue组件挂载后,将o2的视图组件,再挂载到o2-view组件的根Dom对象。当然,这里我们要在我们的O2服务器上创建好数据应用和视图,对应本例中,就是“内容管理数据”应用下的“所有信息”视图。..._vue2 oa
文章浏览阅读222次。table是lua中非常重要的一种类型,有必要对其多了解一些。
文章浏览阅读549次,点赞30次,收藏9次。我们前面学习都有一个概念,被private封装的资源只能类内部访问,外部是不行的,但这个规定被反射赤裸裸的打破了。反射就像一面镜子,它可以清楚看到类的完整结构信息,可以在运行时动态获取类的信息,创建对象以及调用对象的属性和方法。
文章浏览阅读1.1k次,点赞35次,收藏12次。Logical Volume Manager,逻辑卷管理能够在保持现有数据不变的情况下动态调整磁盘容量,从而提高磁盘管理的灵活性/boot分区用于存放引导文件,不能基于LVM创建PV(物理卷):基于硬盘或分区设备创建而来,生成N多个PE,PE默认大小4M物理卷是LVM机制的基本存储设备,通常对应为一个普通分区或整个硬盘。创建物理卷时,会在分区或硬盘的头部创建一个保留区块,用于记录 LVM 的属性,并把存储空间分割成默认大小为 4MB 的基本单元(PE),从而构成物理卷。
文章浏览阅读379次,点赞7次,收藏10次。4、Dielecteic voltage-withstand test 介电耐压试验。1、Maximum output voltage test 输出电压试验。6、Resistance to crushing test 抗压碎试验。8、Push-back relief test 阻力缓解试验。7、Strain relief test 应变消除试验。2、Power input test 功率输入试验。3、Temperature test 高低温试验。5、Abnormal test 故障试验。
文章浏览阅读535次。镜像烧写说明_正点原子 imx6ull nand 烧录