服务结构:
自定义dto类:
场景:dto类继承OccInfo类,并且OccAttr为子类,集合类型。
package com.example.demo.domain; import lombok.Data; import java.io.Serializable; import java.util.List; @Data public class OccInfoDetailDTO extends OccInfo implements Serializable { private static final long serialVersionUID = 2475084829653528256L; private List<OccAttr> occAttrs; }
实体类:
package com.example.demo.domain; import lombok.Data; import java.io.Serializable; @Data public class OccAttr implements Serializable { private static final long serialVersionUID = -5953383629286385755L; private String one; private String two; private String three; }
package com.example.demo.domain; import lombok.Data; import java.io.Serializable; //@JsonIgnoreProperties({"handler" }) @Data public class OccInfo implements Serializable { private static final long serialVersionUID = -5691203726731529307L; private String userId; private String userName; }
父类方法接口:
OccInfoMapper.xml:
我的实现方法:
在父类xml中,写入属性(OccAttr)的resultMap下边的OccAttrMap,再写一个collection管理两个resultMap
如下BaseResultMapAll所示,其中collection表示dto子类属性,resultMap一定要对应上,不然会报(Caused by:Result Maps collection does not contain value for com)结果集中不包含某种属性的错误。
<mapper namespace="com.example.demo.resource.OccInfoMapper" > <resultMap id="OccInfoMap" type="com.example.demo.domain.OccInfo" > <id column="USER_ID" property="userId" jdbcType="VARCHAR" /> <result column="USER_NAME" property="userName" jdbcType="VARCHAR" /> <result column="T1_TWO" property="two" jdbcType="VARCHAR"/> </resultMap> <resultMap id="OccAttrsMap" type="com.example.demo.domain.OccAttr" > <id column="T2_ONE" property="one" jdbcType="VARCHAR" /> <result column="T2_TWO" property="two" jdbcType="VARCHAR" /> <result column="T2_THREE" property="three" jdbcType="VARCHAR" /> </resultMap> <resultMap id="BaseResultMapAll" type="com.example.demo.domain.OccInfoDetailDTO"> <id column="USER_ID" property="userId" jdbcType="VARCHAR" /> <result column="USER_NAME" property="userName" jdbcType="VARCHAR" /> <result column="T1_TWO" property="two" jdbcType="VARCHAR"/> <result column="T1_ONE" property="one" jdbcType="VARCHAR"/> <collection property="occAttrs" resultMap="OccAttrsMap"/> </resultMap> <select id="selectByPrimaryKey" resultMap="BaseResultMapAll" parameterType="java.lang.String" > select t1.USER_ID, t1.USER_NAME, t1.TWO T1_TWO ,t2.ONE, t2.TWO T2_TWO, t3.THREE T2_THREE from OCC_INFO t1 INNER JOIN OCC_ATTR t2 ON t1.TWO=t2.TWO where t1.USER_ID = #{userId,jdbcType=VARCHAR} </select>
出参报文格式如下:
"occInfoDetailDTO":[
{
"userId":"1",
"occAttrs":[
{
"id":"111"
}
]
}
]
如有错误,欢迎指正,共同进步