最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis主從表關(guān)聯(lián)查詢,返回對(duì)象帶有集合屬性解析

 更新時(shí)間:2022年03月10日 15:47:40   作者:瘦_猴  
這篇文章主要介紹了mybatis主從表關(guān)聯(lián)查詢,返回對(duì)象帶有集合屬性解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

主從表關(guān)聯(lián)查詢,返回對(duì)象帶有集合屬性

昨天有同事讓我?guī)椭匆粋€(gè)問題,mybatis主從表聯(lián)合查詢,返回的對(duì)象封裝集合屬性。我先將出現(xiàn)的問題記錄一下,然后再講處理方法也簡(jiǎn)單說(shuō)明一下:

VersionResult為接收返回?cái)?shù)據(jù)對(duì)象

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;
	//記錄內(nèi)容表的集合對(duì)象
	private List<UpdateRecordEntity> UpdateRecordEntityList;	
	}

UpdateRecordEntity為從表數(shù)據(jù)

同樣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寫法,這個(gè)是關(guān)鍵

 <!--跟新記錄表封裝的對(duì)象-->
 <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查詢語(yǔ)句

<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>

執(zhí)行sql返回的數(shù)據(jù)

頁(yè)面調(diào)取接口

下面我將接口數(shù)據(jù)粘貼下來(lái):

{
	"code": "0",
	"msg": "",
	"data": [{
		"id": null,
		"code": "1419",
		"createTimes": null,
		"updateRecordEntityList": []
	}, {
		"id": null,
		"code": "開發(fā)修改1111",
		"createTimes": null,
		"updateRecordEntityList": []
	}, {
		"id": null,
		"code": "開發(fā)修改1111",
		"createTimes": null,
		"updateRecordEntityList": []
	}, {
		"id": null,
		"code": "開發(fā)修改1111",
		"createTimes": null,
		"updateRecordEntityList": []
	}, {
		"id": null,
		"code": "開發(fā)修改1111",
		"createTimes": null,
		"updateRecordEntityList": []
	}]
}

觀察code、createTimes、updateRecordEntityList三個(gè)屬性,會(huì)發(fā)現(xiàn)只有code字段有值其余的全部為null。分析這個(gè)是為啥呢?找點(diǎn)資料粘貼如下:

發(fā)現(xiàn)是sql數(shù)據(jù)和VersionResult的mapper.xml中映射關(guān)系有點(diǎn)問題,沒有對(duì)應(yīng)起來(lái)。resultMap中必須將別名和上面resultMap對(duì)的上就行,很明顯sql返回?cái)?shù)據(jù)的列明沒有和resultMap一一對(duì)應(yīng)起來(lái),因此有了以下對(duì)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>

數(shù)據(jù)顯示正常:

{
?? ?"code": "0",
?? ?"msg": "",
?? ?"data": [{
?? ??? ?"code": "1419",
?? ??? ?"createTimes": "2019-09-02 00:00",
?? ??? ?"updateRecordEntityList": [{
?? ??? ??? ?"moduleName": "安達(dá)市大所",
?? ??? ??? ?"updateContent": "1321321",
?? ??? ??? ?"createTime": "2019-09-02 10:17"
?? ??? ?}]
?? ?}, {
?? ??? ?"code": "開發(fā)修改1111",
?? ??? ?"createTimes": "2019-05-07 00:00",
?? ??? ?"updateRecordEntityList": [{
?? ??? ??? ?"moduleName": "平臺(tái)111111",
?? ??? ??? ?"updateContent": "平臺(tái)版本第一次更新1",
?? ??? ??? ?"createTime": "2019-08-15 15:07"
?? ??? ?}]
?? ?}, {
?? ??? ?"code": "開發(fā)修改1111",
?? ??? ?"createTimes": "2019-05-07 00:00",
?? ??? ?"updateRecordEntityList": [{
?? ??? ??? ?"moduleName": "111",
?? ??? ??? ?"updateContent": "111",
?? ??? ??? ?"createTime": "2019-08-16 11:16"
?? ??? ?}]
?? ?}, {
?? ??? ?"code": "開發(fā)修改1111",
?? ??? ?"createTimes": "2019-05-07 00:00",
?? ??? ?"updateRecordEntityList": [{
?? ??? ??? ?"moduleName": "515",
?? ??? ??? ?"updateContent": "5155",
?? ??? ??? ?"createTime": "2019-08-21 17:29"
?? ??? ?}]
?? ?}, {
?? ??? ?"code": "開發(fā)修改1111",
?? ??? ?"createTimes": "2019-05-07 00:00",
?? ??? ?"updateRecordEntityList": [{
?? ??? ??? ?"moduleName": "2222",
?? ??? ??? ?"updateContent": "第二次更新",
?? ??? ??? ?"createTime": "2019-08-22 14:23"
?? ??? ?}]
?? ?}]
}

mybatis關(guān)聯(lián)查詢(對(duì)象嵌套對(duì)象)

Mybatis 查詢對(duì)象中嵌套其他對(duì)象的解決方法有兩種,

一種是用關(guān)聯(lián)另一個(gè)resultMap的形式

如下:

<association property="office" ?javaType="Office" resultMap="officeMap"/>
<mapper namespace="com.dixn.oa.modules.sys.dao.RoleDao">
? ??
? ?<resultMap type="Office" id="officeMap">
? ? ?? ?<id property="id" column="id" />
? ? ?? ?<result property="name" column="office.name" />
? ? ?? ?<result property="code" column="office.code" />
? ? </resultMap>
? ??
? ? <resultMap id="roleResult" type="Role">
?? ??? ?<id property="id" column="id" />
?? ??? ?<result property="name" column="name" />
?? ??? ?<result property="enname" column="enname" />
?? ??? ?<result property="roleType" column="roleType" />
?? ??? ?<result property="dataScope" column="dataScope" />
?? ??? ?<result property="remarks" column="remarks" />
?? ??? ?<result property="useable" column="useable" />
?? ??? ?<association property="office" ?javaType="Office" resultMap="officeMap"/>
?? ??? ?<collection property="menuList" ofType="Menu">
?? ??? ??? ?<id property="id" column="menuList.id" />
?? ??? ?</collection>
?? ??? ?<collection property="officeList" ofType="Office">
?? ??? ??? ?<id property="id" column="officeList.id" />
?? ??? ?</collection>
?? ?</resultMap>
? ? <sql id="roleColumns">
? ? ?? ?a.id,
? ? ?? ?a.office_id AS "office.id",
? ? ?? ?a.name,
? ? ?? ?a.enname,
? ? ?? ?a.role_type AS roleType,
?? ?a.data_scope AS dataScope,
?? ?a.remarks,
?? ?a.create_by AS "createBy.id",
?? ?a.create_date,
?? ?a.update_by AS "updateBy.id",
?? ?a.update_date,
?? ?a.del_flag,
? ? ?? ?o.name AS "office.name",
? ? ?? ?o.code AS "office.code",
? ? ?? ?a.useable AS useable,
? ? ?? ?a.is_sys AS sysData
? ? </sql>
<select id="get" resultMap="roleResult">
?? ?SELECT
?? ?<include refid="roleColumns"/>
?? ?rm.menu_id AS "menuList.id",
?? ?ro.office_id AS "officeList.id"
?? ?FROM sys_role a
?? ?JOIN sys_office o ON o.id = a.office_id
?? ?LEFT JOIN sys_role_menu rm ON rm.role_id = a.id
?? ?LEFT JOIN sys_role_office ro ON ro.role_id = a.id
?? ?WHERE a.id = #{id}
</select>

一種聯(lián)合查詢 (一對(duì)一)的實(shí)現(xiàn)

但是這種方式有“N+1”的問題,不建議使用

?<resultMap id="roleResult" type="Role">
?? ??? ?<id property="id" column="id" />
?? ??? ?<result property="name" column="name" />
?? ??? ?<result property="enname" column="enname" />
?? ??? ?<result property="roleType" column="roleType" />
?? ??? ?<result property="dataScope" column="dataScope" />
?? ??? ?<result property="remarks" column="remarks" />
?? ??? ?<result property="useable" column="useable" />
?? ??? ?<association property="office" ?javaType="Office" ? ? column="id" select="getOfficeById"/>
?? ??? ?<collection property="menuList" ofType="Menu">
?? ??? ??? ?<id property="id" column="menuList.id" />
?? ??? ?</collection>
?? ??? ?<collection property="officeList" ofType="Office">
?? ??? ??? ?<id property="id" column="officeList.id" />
?? ??? ?</collection>
?? ?</resultMap>
? ? <select id="getOfficeById" ?resultType="Office">
? ? ? ? select o.name AS "office.name",o.code AS "office.code" from sys_office o where o.id = #{id}
? ? </select>?

以上就是兩種對(duì)象內(nèi)嵌套對(duì)象查詢的實(shí)現(xiàn)。僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java回溯法解決全排列問題流程詳解

    Java回溯法解決全排列問題流程詳解

    從n個(gè)不同元素中任取m(m≤n)個(gè)元素,按照一定的順序排列起來(lái),叫做從n個(gè)不同元素中取出m個(gè)元素的一個(gè)排列。當(dāng)m=n時(shí)所有的排列情況叫全排列。這篇文章主要介紹了Java回溯法解決全排列問題
    2022-10-10
  • Java高級(jí)應(yīng)用之斗地主游戲

    Java高級(jí)應(yīng)用之斗地主游戲

    這篇文章主要為大家詳細(xì)介紹了Java高級(jí)應(yīng)用之斗地主游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Java線程通信詳解

    Java線程通信詳解

    本篇文章主要介紹了Java線程通信問題,線程通信用來(lái)保證線程協(xié)調(diào)運(yùn)行,有需要的朋友可以了解一下。
    2016-10-10
  • java線程池使用場(chǎng)景及一些建議

    java線程池使用場(chǎng)景及一些建議

    本文主要介紹了java線程池使用場(chǎng)景及一些建議,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • JAVA實(shí)現(xiàn)感知器算法

    JAVA實(shí)現(xiàn)感知器算法

    這篇文章主要為大家詳細(xì)介紹了JAVA實(shí)現(xiàn)感知器算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • SpringBoot-RestTemplate實(shí)現(xiàn)調(diào)用第三方API的方式

    SpringBoot-RestTemplate實(shí)現(xiàn)調(diào)用第三方API的方式

    RestTemplate?是由?Spring?提供的一個(gè)?HTTP?請(qǐng)求工具,它提供了常見的REST請(qǐng)求方案的模版,例如?GET?請(qǐng)求、POST?請(qǐng)求、PUT?請(qǐng)求、DELETE?請(qǐng)求以及一些通用的請(qǐng)求執(zhí)行方法?exchange?以及?execute,下面看下SpringBoot?RestTemplate調(diào)用第三方API的方式
    2022-12-12
  • JVM執(zhí)行引擎的項(xiàng)目實(shí)踐

    JVM執(zhí)行引擎的項(xiàng)目實(shí)踐

    執(zhí)行引擎是Java虛擬機(jī)核心的組成部分之一,本文主要介紹了JVM執(zhí)行引擎的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Spring boot整合Mybatis實(shí)現(xiàn)級(jí)聯(lián)一對(duì)多CRUD操作的完整步驟

    Spring boot整合Mybatis實(shí)現(xiàn)級(jí)聯(lián)一對(duì)多CRUD操作的完整步驟

    這篇文章主要給大家介紹了關(guān)于Spring boot整合Mybatis實(shí)現(xiàn)級(jí)聯(lián)一對(duì)多CRUD操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 關(guān)于Mybatis中SQL節(jié)點(diǎn)的深入解析

    關(guān)于Mybatis中SQL節(jié)點(diǎn)的深入解析

    這篇文章主要給大家介紹了關(guān)于Mybatis中SQL節(jié)點(diǎn)的深入解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法

    Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09

最新評(píng)論

静海县| 阿合奇县| 墨玉县| 盖州市| 云阳县| 天台县| 台江县| 文安县| 惠安县| 中山市| 自贡市| 平果县| 洛扎县| 天水市| 湾仔区| 庄浪县| 潞西市| 广东省| 新密市| 宜春市| 阿拉善盟| 宁乡县| 广昌县| 根河市| 大港区| 基隆市| 连州市| 朔州市| 噶尔县| 新巴尔虎右旗| 探索| 天峨县| 灵宝市| 德阳市| 游戏| 青州市| 正镶白旗| 固始县| 彭山县| 池州市| 怀安县|