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"
                               
                            }
                        ]

                    }

                ]

如有错误,欢迎指正,共同进步

猜你喜欢

转载自blog.csdn.net/qq_35193093/article/details/80335234