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

mybatis?實現多層級collection嵌套

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

mybatis多層級collection嵌套

json結構

第一步查詢

第一層查詢,將第一層的id傳遞到第二層當條件查詢    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傳遞到第三層當條件查詢    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>

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

最后附實體截圖,其實看json就可以了

第一層實體:

第二層實體:

第三層實體:

方式二(推薦)

<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 實體描述

/**
 * <p>
 * 家庭表
 * </p>
 *
 * @author lohas
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("t_family_info")
@ApiModel(value = "FamilyInfoEntity對象", 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 = "國家")
    private String country;
 
    @ApiModelProperty(value = "城市")
    private String city;
 
    @ApiModelProperty(value = "地址")
    private String address;
 
    @ApiModelProperty(value = "經度")
    private BigDecimal longitude;
 
    @ApiModelProperty(value = "緯度")
    private BigDecimal latitude;
 
    @ApiModelProperty(value = "租戶ID")
    private String tenantId;
 
    @ApiModelProperty(value = "是否刪除(0:正常;低于0的數字:已刪除)")
    private String deleteFlag;
 
    @ApiModelProperty(value = "創(chuàng)建人ID")
    private String creatorId;
 
    @ApiModelProperty(value = "創(chuàng)建時間")
    @JsonDeserialize(using = LocalDateTimeSerializerConfig.LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializerConfig.LocalDateTimeSerializer.class)
    private LocalDateTime createTime;
 
    @ApiModelProperty(value = "更新人ID")
    private String updateId;
 
    @ApiModelProperty(value = "更新時間")
    @JsonDeserialize(using = LocalDateTimeSerializerConfig.LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializerConfig.LocalDateTimeSerializer.class)
    private LocalDateTime updateTime;
 
}
/**
 * @author lohas
 * @description
 */
@Data
@ApiModel(value = "RoomDeviceInfoVo對象", description = "房間設備信息實體")
public class RoomDeviceInfoVo implements Serializable {
 
    @ApiModelProperty(value = "房間id")
    private String roomId;
 
    @ApiModelProperty(value = "房間名稱")
    private String roomName;
 
    @ApiModelProperty(value = "設備數量")
    private Integer deviceNum;
 
    @ApiModelProperty(value = "設備信息列表")
    private List<String> deviceIds;
}
/**
 * @author lohas
 * @description
 */
@Data
@ApiModel(value = "FamilyRoomInfoVo對象", description = "家庭房間信息對象實例")
public class FamilyRoomInfoVo extends FamilyInfoEntity {
 
    @ApiModelProperty(value = "房間設備信息列表")
    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因為columnPrefix="r_"(如果字段唯一,可以不加)
                    trf.room_name AS r_room_name, --要加上r因為columnPrefix="r_"
                    trd.device_id AS r_d_device_id --要加上r因為columnPrefix="r_",加上d因為columnPrefix="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因為columnPrefix="r_"
                    COUNT(trd.device_id) AS r_device_num  --要加上r因為columnPrefix="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">
		<!-- 三層: 設備信息-->
		<result column="device_id" jdbcType="VARCHAR"/>
	</resultMap>
 
</mapper>

調用方法

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

注意總結

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

<collection property="roomDeviceInfoVoList" columnPrefix="r_" resultMap="roomMap"/>
<collection property="deviceIds" columnPrefix="d_" resultMap="deviceMap"/>
r_d_device_id(要加上r因為roomMap columnPrefix="r_",加上d因為deviceMap columnPrefix="d_")

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • java單向鏈表的實現實例

    java單向鏈表的實現實例

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

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

    動態(tài)代理指的是,代理類和目標類的關系在程序運行的時候確定的,客戶通過代理類來調用目標對象的方法,是在程序運行時根據需要動態(tài)的創(chuàng)建目標類的代理對象。本文將通過案例詳細講解一下Java動態(tài)代理的原理及實現,需要的可以參考一下
    2022-07-07
  • springboot如何獲取application.yml里值的方法

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

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

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

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

    Java客戶端服務端上傳接收文件實現詳解

    這篇文章主要介紹了Java客戶端服務端上傳接收文件實現詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • java遞歸實現樹形結構數據完整案例

    java遞歸實現樹形結構數據完整案例

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

    探索Java中的equals()和hashCode()方法_動力節(jié)點Java學院整理

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

    劍指Offer之Java算法習題精講鏈表與數組專項訓練

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

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

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

    MybatisPlus關聯查詢的完美實現方案

    我們在項目開發(fā)的時候,難免會遇到連表查詢的操作,所以下面這篇文章主要給大家介紹了關于MybatisPlus關聯查詢的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-12-12

最新評論