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"
		}]
	}]
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章