mybaits xml實現繼承關係dto自定義物件關聯查詢(一對多)
阿新 • • 發佈:2019-02-03
服務結構:
自定義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; privateString 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"
}
]
}
]
如有錯誤,歡迎指正,共同進步