欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis?實(shí)現(xiàn)多層級(jí)collection嵌套

 更新時(shí)間:2022年03月11日 08:39:36   作者:縹緲神  
這篇文章主要介紹了mybatis?實(shí)現(xiàn)多層級(jí)collection嵌套,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mybatis多層級(jí)collection嵌套

json結(jié)構(gòu)

第一步查詢

第一層查詢,將第一層的id傳遞到第二層當(dāng)條件查詢    column="id"

<resultMap id="BaseResultMapClass" type="com.kingyon.common.models.shortcut.ShortcutKeyClassBean">
    <id column="id" jdbcType="INTEGER" property="id"/>
    <result column="title" jdbcType="VARCHAR" property="title"/>
    <result column="img" jdbcType="VARCHAR" property="img"/>
    <result column="bgColor" jdbcType="VARCHAR" property="bgColor"/>
    <result column="describe" jdbcType="VARCHAR" property="describe"/>
    <result column="type" jdbcType="BIGINT" property="type"/>
    <collection property="functionBeans" ofType="com.kingyon.common.models.shortcut.ShortcutKeyFunctionBean"
                select="com.kingyon.core.repository.ShortcutKeyMapper.getShortcutKeyFunction" column="id">
 
    </collection>
</resultMap>
<select id="findShortcutKeyByClassID" resultMap="BaseResultMapClass">
    select * from t_shortcut_key_class where id=#{classID} ;
</select>

第二步查詢

第二層查詢,并將第二層的id傳遞到第三層當(dāng)條件查詢    column="funID"  是別名

<resultMap id="baseShortcutKey" type="com.kingyon.common.models.shortcut.ShortcutKeyFunctionBean">
    <id column="id" jdbcType="INTEGER" property="funID"/>
    <result column="classID" jdbcType="VARCHAR" property="classID"/>
    <result column="describe" jdbcType="VARCHAR" property="describe"/>
    <result column="sort" jdbcType="VARCHAR" property="sort"/>
    <result column="className" jdbcType="VARCHAR" property="className"/>
    <collection property="shortcutKeyBean" ofType="com.kingyon.common.models.shortcut.ShortcutKeyBean"
                select="com.kingyon.core.repository.ShortcutKeyMapper.getShortcutKey" column="funID">
 
    </collection>
</resultMap>
<select id="getShortcutKeyFunction" resultMap="baseShortcutKey">
    select fun.id as funID,fun.classID,fun.describe,fun.sort from t_shortcut_key_function  as fun where fun.classID=#{classID} order by sort DESC ;
</select>

第三步查詢(第三層查詢)

<resultMap id="shortcutKeyBean" type="com.kingyon.common.models.shortcut.ShortcutKeyBean">
    <result property="id" column="keyID"/>
    <result property="shortcut" column="shortcut"/>
    <result property="details" column="details"/>
</resultMap>
<select id="getShortcutKey" resultMap="shortcutKeyBean">
      select * from t_shortcut_key where funID=#{id};
</select>

其實(shí)蠻好理解的,就是查詢一個(gè),然后把條件傳遞下步繼續(xù)查詢。。。 使用時(shí)調(diào)第一層,也就是從高到底。

最后附實(shí)體截圖,其實(shí)看json就可以了

第一層實(shí)體:

第二層實(shí)體:

第三層實(shí)體:

方式二(推薦)

<resultMap id="chapter" type="com.xx.xx.xx.xx.xxBean">
? ? <id column="id" property="id"/>
? ? <result column="name" property="name"/>
? ? <collection property="chapterChildBeans"
? ? ? ? ? ? ? ? ofType="com.xx.xx.mode.xx.xxBean">
? ? ? ? <id column="cId" property="id"/>
? ? ? ? <result column="cName" property="name"/>
? ? </collection>
</resultMap>
<select id="selectChapter" resultMap="chapter">
? ? SELECT c.id,c.name,cc.id as cId,cc.name as cName from t_chapter c,t_chapter_child cc WHERE c.id=cc.chapterID and c.subjectID=#{subjectID}
</select>

mybatis多層(三層)嵌套查詢

java 實(shí)體描述

/**
 * <p>
 * 家庭表
 * </p>
 *
 * @author lohas
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("t_family_info")
@ApiModel(value = "FamilyInfoEntity對(duì)象", description = "家庭表")
public class FamilyInfoEntity extends Model { 
    private static final long serialVersionUID = 1L; 
    @ApiModelProperty(value = "主鍵")
    @TableId(value = "id", type = IdType.INPUT)
    private String id;
 
    @ApiModelProperty(value = "家庭名稱")
    private String familyName;
 
    @ApiModelProperty(value = "家庭頭像url")
    private String headUrl;
 
    @ApiModelProperty(value = "國(guó)家")
    private String country;
 
    @ApiModelProperty(value = "城市")
    private String city;
 
    @ApiModelProperty(value = "地址")
    private String address;
 
    @ApiModelProperty(value = "經(jīng)度")
    private BigDecimal longitude;
 
    @ApiModelProperty(value = "緯度")
    private BigDecimal latitude;
 
    @ApiModelProperty(value = "租戶ID")
    private String tenantId;
 
    @ApiModelProperty(value = "是否刪除(0:正常;低于0的數(shù)字:已刪除)")
    private String deleteFlag;
 
    @ApiModelProperty(value = "創(chuàng)建人ID")
    private String creatorId;
 
    @ApiModelProperty(value = "創(chuàng)建時(shí)間")
    @JsonDeserialize(using = LocalDateTimeSerializerConfig.LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializerConfig.LocalDateTimeSerializer.class)
    private LocalDateTime createTime;
 
    @ApiModelProperty(value = "更新人ID")
    private String updateId;
 
    @ApiModelProperty(value = "更新時(shí)間")
    @JsonDeserialize(using = LocalDateTimeSerializerConfig.LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializerConfig.LocalDateTimeSerializer.class)
    private LocalDateTime updateTime;
 
}
/**
 * @author lohas
 * @description
 */
@Data
@ApiModel(value = "RoomDeviceInfoVo對(duì)象", description = "房間設(shè)備信息實(shí)體")
public class RoomDeviceInfoVo implements Serializable {
 
    @ApiModelProperty(value = "房間id")
    private String roomId;
 
    @ApiModelProperty(value = "房間名稱")
    private String roomName;
 
    @ApiModelProperty(value = "設(shè)備數(shù)量")
    private Integer deviceNum;
 
    @ApiModelProperty(value = "設(shè)備信息列表")
    private List<String> deviceIds;
}
/**
 * @author lohas
 * @description
 */
@Data
@ApiModel(value = "FamilyRoomInfoVo對(duì)象", description = "家庭房間信息對(duì)象實(shí)例")
public class FamilyRoomInfoVo extends FamilyInfoEntity {
 
    @ApiModelProperty(value = "房間設(shè)備信息列表")
    private List<RoomDeviceInfoVo> roomDeviceInfoVoList;
}

mybatis xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lohas.mapper.FamilyInfoMapper">
 
    <select id="getFamilyRoomInfoVoByUserId" resultMap="familyMap">
		SELECT *
		FROM (
             SELECT tfi.*,
                    trf."id"      AS r_room_id,  --要加上r因?yàn)閏olumnPrefix="r_"(如果字段唯一,可以不加)
                    trf.room_name AS r_room_name, --要加上r因?yàn)閏olumnPrefix="r_"
                    trd.device_id AS r_d_device_id --要加上r因?yàn)閏olumnPrefix="r_",加上d因?yàn)閏olumnPrefix="d_"
             FROM t_user_family tuf
                      LEFT JOIN t_family_info tfi ON tfi.ID = tuf.family_id
                      LEFT JOIN t_family_room tfr ON tuf.family_id = tfr.family_id
                      LEFT JOIN t_room_info trf ON tfr.room_id = trf.ID
                      LEFT JOIN t_room_device trd ON tfr.room_id = trd.room_id
             WHERE tuf.user_id = #{userId}
             ORDER BY tfi.create_time DESC
         ) AS fr,
         (
             SELECT trf."id"             AS r_room_id,  --要加上r因?yàn)閏olumnPrefix="r_"
                    COUNT(trd.device_id) AS r_device_num  --要加上r因?yàn)閏olumnPrefix="r_"
             FROM t_user_family tuf
                      LEFT JOIN t_family_info tfi ON tfi.ID = tuf.family_id
                      LEFT JOIN t_family_room tfr ON tuf.family_id = tfr.family_id
                      LEFT JOIN t_room_info trf ON tfr.room_id = trf.
                 ID
                      LEFT JOIN t_room_device trd ON tfr.room_id = trd.room_id
             WHERE tuf.user_id = #{userId}
             GROUP BY trf."id"
         ) AS rd
		WHERE fr.r_room_id = rd.r_room_id
	</select>
 
	<resultMap id="familyMap" type="com.lohas.vo.FamilyRoomInfoVo">
		<!-- 一層: 家庭信息-->
		<id column="id" jdbcType="VARCHAR" property="id"/>
		<result column="family_name" jdbcType="VARCHAR" property="familyName"/>
		<result column="head_url" jdbcType="VARCHAR" property="headUrl"/>
		<result column="country" jdbcType="VARCHAR" property="country"/>
		<result column="city" jdbcType="VARCHAR" property="city"/>
		<result column="address" jdbcType="VARCHAR" property="address"/>
		<result column="longitude" jdbcType="NUMERIC" property="longitude"/>
		<result column="latitude" jdbcType="NUMERIC" property="latitude"/>
		<result column="delete_flag" jdbcType="CHAR" property="deleteFlag"/>
		<result column="creator_id" jdbcType="VARCHAR" property="creatorId"/>
		<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
		<result column="update_id" jdbcType="VARCHAR" property="updateId"/>
		<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
		<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>
		<!-- 如果字段唯一,可以不加columnPrefix="r_"-->
		<collection property="roomDeviceInfoVoList" columnPrefix="r_" resultMap="roomMap"/>
	</resultMap>
 
	<resultMap id="roomMap" type="com.lohas.vo.RoomDeviceInfoVo">
		<!-- 二層: 房間信息-->
		<result column="room_id" jdbcType="VARCHAR" property="roomId"/>
		<result column="room_name" jdbcType="VARCHAR" property="roomName"/>
		<result column="device_num" jdbcType="VARCHAR" property="deviceNum"/>
		<!-- 如果字段唯一,可以不加columnPrefix="d_"-->
		<collection property="deviceIds" columnPrefix="d_" resultMap="deviceMap"/>
	</resultMap>
 
	<resultMap id="deviceMap" type="string">
		<!-- 三層: 設(shè)備信息-->
		<result column="device_id" jdbcType="VARCHAR"/>
	</resultMap>
 
</mapper>

調(diào)用方法

public interface FamilyInfoMapper extends BaseMapper<FamilyInfoEntity> {?
?? ?List<FamilyRoomInfoVo> getFamilyRoomInfoVoByUserId(@Param("userId") String userId); ??
}

注意總結(jié)

如果你的字段唯一,columnPrefix="r_" 和 columnPrefix="d_",可以不加,如果你加上了columnPrefix記得在字段上拼接上,否則查詢不出數(shù)據(jù),拼接要有前后順序拼接例如:

<collection property="roomDeviceInfoVoList" columnPrefix="r_" resultMap="roomMap"/>
<collection property="deviceIds" columnPrefix="d_" resultMap="deviceMap"/>
r_d_device_id(要加上r因?yàn)閞oomMap columnPrefix="r_",加上d因?yàn)閐eviceMap columnPrefix="d_")

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java單向鏈表的實(shí)現(xiàn)實(shí)例

    java單向鏈表的實(shí)現(xiàn)實(shí)例

    java單向鏈表的實(shí)現(xiàn)實(shí)例。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • Java深入分析動(dòng)態(tài)代理

    Java深入分析動(dòng)態(tài)代理

    動(dòng)態(tài)代理指的是,代理類和目標(biāo)類的關(guān)系在程序運(yùn)行的時(shí)候確定的,客戶通過(guò)代理類來(lái)調(diào)用目標(biāo)對(duì)象的方法,是在程序運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)的創(chuàng)建目標(biāo)類的代理對(duì)象。本文將通過(guò)案例詳細(xì)講解一下Java動(dòng)態(tài)代理的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-07-07
  • springboot如何獲取application.yml里值的方法

    springboot如何獲取application.yml里值的方法

    這篇文章主要介紹了springboot如何獲取application.yml里的值,文章圍繞主題相關(guān)自資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • 在Java中為日期增加一天的多種方法

    在Java中為日期增加一天的多種方法

    這篇文章主要給大家介紹了關(guān)于如何在Java中為日期增加一天的多種方法,在JAVA業(yè)務(wù)代碼中,經(jīng)常會(huì)遇到通過(guò)指定時(shí)間,增加指定天數(shù)的業(yè)務(wù)需求,需要的朋友可以參考下
    2023-07-07
  • Java客戶端服務(wù)端上傳接收文件實(shí)現(xiàn)詳解

    Java客戶端服務(wù)端上傳接收文件實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java客戶端服務(wù)端上傳接收文件實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)數(shù)據(jù)完整案例

    java遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)數(shù)據(jù)完整案例

    遞歸算法的代碼比較簡(jiǎn)潔,可讀性較好;但是在實(shí)際的業(yè)務(wù)處理中會(huì)出現(xiàn)多次的重復(fù)調(diào)用,如果處理不好,很容易出現(xiàn)StackOverflowError報(bào)錯(cuò),這篇文章主要給大家介紹了關(guān)于java遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • 探索Java中的equals()和hashCode()方法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    探索Java中的equals()和hashCode()方法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了探索Java中的equals()和hashCode()方法的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 劍指Offer之Java算法習(xí)題精講鏈表與數(shù)組專項(xiàng)訓(xùn)練

    劍指Offer之Java算法習(xí)題精講鏈表與數(shù)組專項(xiàng)訓(xùn)練

    跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過(guò)之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • 支付寶二面:使用?try-catch?捕獲異常會(huì)影響性能嗎(推薦)

    支付寶二面:使用?try-catch?捕獲異常會(huì)影響性能嗎(推薦)

    這篇文章主要介紹了支付寶二面:使用?try-catch?捕獲異常會(huì)影響性能嗎,需要注意的是,JVM?中?異常處理的catch語(yǔ)句不再由字節(jié)碼指令來(lái)實(shí)現(xiàn)(很早之前通過(guò)?jsr和?ret指令來(lái)完成,需要的朋友可以參考下
    2023-03-03
  • MybatisPlus關(guān)聯(lián)查詢的完美實(shí)現(xiàn)方案

    MybatisPlus關(guān)聯(lián)查詢的完美實(shí)現(xiàn)方案

    我們?cè)陧?xiàng)目開發(fā)的時(shí)候,難免會(huì)遇到連表查詢的操作,所以下面這篇文章主要給大家介紹了關(guān)于MybatisPlus關(guān)聯(lián)查詢的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12

最新評(píng)論