1. 程式人生 > >mybaits xml實現繼承關係dto自定義物件關聯查詢(一對多)

mybaits xml實現繼承關係dto自定義物件關聯查詢(一對多)

服務結構:


自定義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"
                               
                            }
                        ]

                    }

                ]

如有錯誤,歡迎指正,共同進步