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

Mybatis的collection三層嵌套查詢方式(驗(yàn)證通過(guò))

 更新時(shí)間:2023年03月15日 10:11:17   作者:北冥牧之  
這篇文章主要介紹了Mybatis的collection三層嵌套查詢方式(驗(yàn)證通過(guò)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mybatis collection三層嵌套查詢

在Mybatis中存在很多1對(duì)N查詢的場(chǎng)景,比如在打開(kāi)一個(gè)編輯頁(yè)面時(shí),需要帶出對(duì)應(yīng)的新增時(shí)添加的數(shù)據(jù),如果頁(yè)面有一些多個(gè)層級(jí)一對(duì)多的情況,那么在編輯時(shí)就需要查詢出所有的層級(jí)。

當(dāng)然這種情況,先查詢出最外面的情況,再循環(huán)查詢數(shù)據(jù)庫(kù)查詢出里面的數(shù)據(jù)也是沒(méi)問(wèn)題的,但是這樣性能會(huì)非常差。

最好的方式就是直接在Mybatis中直接做好1對(duì)多的映射直接查詢出來(lái)。

一般情況下,我們都是兩層的嵌套

類(lèi)似這樣的:

@Data
public class Class {
? ??
? ? private String classId;
?
? ? private String className;
?
? ? pirvate List<Student> studentList;
}
?
?
@Data
public class Student {
? ??
? ? private String studentId;
?
? ? private String ?studentName;
? ??
? ? private String classId;
}

這種兩層嵌套的查詢比較好處理,網(wǎng)上的方案也比較多,大家可以自行百度。

但是如果是三層,乃至于多層的嵌套就不太好處理了。

找到一個(gè)方案

mybatis多層級(jí)collection嵌套

是否可行,沒(méi)有嘗試。

下面是我自己的方案,在項(xiàng)目中親測(cè)可行。

實(shí)體類(lèi)的映射關(guān)系

# 一個(gè)班級(jí)有多個(gè)學(xué)生
@Data
public class Class {
? ??
? ? private String classId;
?
? ? private String className;
?
? ? pirvate List<Student> studentList;
}
?
# 一個(gè)學(xué)生有多個(gè)愛(ài)好
@Data
public class Student {
? ??
? ? private String studentId;
?
? ? private String ?studentName;
? ??
? ? private String classId;
?
? ? pirvate List<Hobby> hobbyList;
}
?
# 愛(ài)好
@Data
public class Hobby {
? ??
? ? private String hobbyId;
?
? ? private String hobbyName;
? ??
? ? private String studentId;
}

SQL映射關(guān)系如下

其中第一個(gè)resultMap是一種分開(kāi)SQL查詢的處理方式,第二個(gè)resultMap是一種單個(gè)SQL解決嵌套問(wèn)題的寫(xiě)法。這里我把它們?nèi)诤蠟橐粋€(gè)了。

如果是只有兩層嵌套的話,基本上一個(gè)SQL的寫(xiě)法就可以搞定,或者說(shuō)簡(jiǎn)潔明了的方式就使用兩個(gè)SQL的寫(xiě)法。

解析如下

classMap:

查詢class的信息,以及對(duì)應(yīng)的學(xué)生列表,采用2個(gè)SQL的寫(xiě)法處理,其中select是查詢這個(gè)studentList的SQL的id,即queryStudentInfo。

傳遞的column是兩張表關(guān)聯(lián)的字段,也就是說(shuō)將第一層的班級(jí)id傳遞到下一個(gè)SQL中作為參數(shù)。

studentMap:

查詢學(xué)生的信息,以及愛(ài)好列表,采用單個(gè)SQL的查詢方式,直接把愛(ài)好的字段直接放在了collection中。

<resultMap id="classMap" type="com.xxx.Class">
? ? ? ? <id column="class_id" property="classId"/>
? ? ? ? <result column="class_name" property="className"/>
? ? ? ? <collection property="studentList" javaType="java.util.List" ? ? ? ? ? ??
? ? ? ? ? ? ofType="com.xxx.StudentPO"
? ? ? ? ? ? ? ? ? ? select="queryStudentInfo" column="class_id">
? ? ? ? </collection>
</resultMap>
?
<resultMap id="studentMap" type="com.xxx.Student">
? ? ? ? <id column="student_id" property="studentId"/>
? ? ? ? <result column="student_name" property="studentName"/>
? ? ? ? <collection property="hobbyList" javaType="java.util.List"?
? ? ? ? ? ? ofType="com.xxx.Hobby">
? ? ? ? ? ? <id column="hobby_id" property="hobbyId"/>
? ? ? ? ? ? <result column="hobby_name" property="hobbyName"/>
? ? ? ? </collection>
</resultMap>

SQL如下:

<select id="queryClassInfo" resultMap="classMap">
? ? ? ? SELECT
? ? ? ? ? ? class_id,
? ? ? ? ? ? class_name
? ? ? ? FROM
? ? ? ? ? ? class
? ? ? ? where
? ? ? ? ? ? class_id = #{classId}
</select>
?
?
<select id="queryStudentInfo" resultMap="studentMap">
? ? ? ? SELECT
? ? ? ? ? ? sutdent_id,
? ? ? ? ? ? sutdent_name,
? ? ? ? ? ? hobby_id,
? ? ? ? ? ? hobby_name
? ? ? ? FROM
? ? ? ? ? ? student t1
? ? ? ? LEFT JOIN
? ? ? ? ? ? hobby t2
? ? ? ? ON
? ? ? ? ? ? t1.sutdent_id = t2.sutdent_id
? ? ? ? where
? ? ? ? ? ? class_id = #{classId}
</select>

總結(jié)

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

相關(guān)文章

  • SpringBoot Security整合JWT授權(quán)RestAPI的實(shí)現(xiàn)

    SpringBoot Security整合JWT授權(quán)RestAPI的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot Security整合JWT授權(quán)RestAPI的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Mybatis Plus 代碼生成器的實(shí)現(xiàn)

    Mybatis Plus 代碼生成器的實(shí)現(xiàn)

    這篇文章主要介紹了Mybatis Plus 代碼生成器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • SpringBoot中時(shí)間類(lèi)型 序列化、反序列化、格式處理示例代碼

    SpringBoot中時(shí)間類(lèi)型 序列化、反序列化、格式處理示例代碼

    這篇文章主要介紹了SpringBoot中時(shí)間類(lèi)型 序列化、反序列化、格式處理示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 淺談將JNI庫(kù)打包入jar文件

    淺談將JNI庫(kù)打包入jar文件

    這篇文章主要介紹了淺談將JNI庫(kù)打包入jar文件,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • IDEA使用GsonFormat完成JSON和JavaBean之間的轉(zhuǎn)換

    IDEA使用GsonFormat完成JSON和JavaBean之間的轉(zhuǎn)換

    這篇文章主要介紹了IDEA使用GsonFormat完成JSON和JavaBean之間的轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Scala入門(mén)教程詳解

    Scala入門(mén)教程詳解

    這篇文章主要介紹了Scala入門(mén)教程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • java使用UDP實(shí)現(xiàn)多人聊天功能

    java使用UDP實(shí)現(xiàn)多人聊天功能

    這篇文章主要為大家詳細(xì)介紹了java使用UDP實(shí)現(xiàn)多人聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • mybatis中association標(biāo)簽的使用解讀

    mybatis中association標(biāo)簽的使用解讀

    這篇文章主要介紹了mybatis中association標(biāo)簽的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java實(shí)現(xiàn)excel自定義樣式與字段導(dǎo)出詳細(xì)圖文教程

    java實(shí)現(xiàn)excel自定義樣式與字段導(dǎo)出詳細(xì)圖文教程

    最近接到一個(gè)需求,客戶不滿意原本導(dǎo)出的csv文件,想要導(dǎo)出Excel文件,下面這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)excel自定義樣式與字段導(dǎo)出詳細(xì)圖文教程
    2023-09-09
  • Java ArrayList 實(shí)現(xiàn)實(shí)例講解

    Java ArrayList 實(shí)現(xiàn)實(shí)例講解

    ArrayList是基于數(shù)組實(shí)現(xiàn)的,是一個(gè)動(dòng)態(tài)數(shù)組,其容量能自動(dòng)增長(zhǎng),類(lèi)似于C語(yǔ)言中的動(dòng)態(tài)申請(qǐng)內(nèi)存,動(dòng)態(tài)增長(zhǎng)內(nèi)存。這篇文章主要介紹了java ArrayList 實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2016-11-11

最新評(píng)論

疏勒县| 盐津县| 涡阳县| 台北县| 板桥市| 轮台县| 马山县| 吉安县| 开原市| 南澳县| 安岳县| 银川市| 调兵山市| 大悟县| 沾化县| 昔阳县| 唐山市| 榆中县| 芦山县| 德阳市| 乡宁县| 宁陵县| 龙里县| 政和县| 团风县| 丹凤县| 天水市| 南丹县| 河东区| 高邮市| 中西区| 宝应县| 都匀市| 手机| 石屏县| 云阳县| 卢湾区| 松桃| 遂川县| 安龙县| 和顺县|