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

mybatis之嵌套查詢和嵌套結(jié)果有哪些區(qū)別

 更新時間:2023年03月15日 09:27:23   作者:懶鼠  
這篇文章主要介紹了mybatis之嵌套查詢和嵌套結(jié)果有哪些區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mybatis嵌套查詢和嵌套結(jié)果有啥區(qū)別

嵌套查詢的弊端:即嵌套查詢的N+1問題

盡管嵌套查詢大量的簡化了存在關(guān)聯(lián)關(guān)系的查詢,但它的弊端也比較明顯:即所謂的N+1問題。關(guān)聯(lián)的嵌套查詢顯示得到一個結(jié)果集,然后根據(jù)這個結(jié)果集的每一條記錄進(jìn)行關(guān)聯(lián)查詢。

現(xiàn)在假設(shè)嵌套查詢就一個(即resultMap內(nèi)部就一個association標(biāo)簽),現(xiàn)查詢的結(jié)果集返回條數(shù)為N,那么關(guān)聯(lián)查詢語句將會被執(zhí)行N次,加上自身返回結(jié)果集查詢1次,共需要訪問數(shù)據(jù)庫N+1次。

如果N比較大的話,這樣的數(shù)據(jù)庫訪問消耗是非常大的!所以使用這種嵌套語句查詢的使用者一定要考慮慎重考慮,確保N值不會很大。

嵌套結(jié)果查詢

嵌套語句的查詢會導(dǎo)致數(shù)據(jù)庫訪問次數(shù)不定,進(jìn)而有可能影響到性能。

Mybatis還支持一種嵌套結(jié)果的查詢:即對于一對多,多對多,多對一的情況的查詢,Mybatis通過聯(lián)合查詢,將結(jié)果從數(shù)據(jù)庫內(nèi)一次性查出來,然后根據(jù)其一對多,多對一,多對多的關(guān)系和ResultMap中的配置,進(jìn)行結(jié)果的轉(zhuǎn)換,構(gòu)建需要的對象。

探索嵌套查詢和嵌套結(jié)果這對孿生子的秘密?。。?/h2>

MyBatis在映射文件中加載關(guān)聯(lián)關(guān)系對象主要通過兩種方式:嵌套查詢和嵌套結(jié)果。

嵌套查詢是指通過執(zhí)行另外一條SQL映射語句來返回預(yù)期的復(fù)雜類型;

嵌套結(jié)果是使用嵌套結(jié)果映射來處理重復(fù)的聯(lián)合結(jié)果的子集。開發(fā)人員可以使用上述任意一種方式實現(xiàn)對關(guān)聯(lián)關(guān)系的加載。

這兩者之間有什么聯(lián)系?

如何理解這些區(qū)別呢?????

咱們直接代碼來說話。

<?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.zsj.mapper.PersonMapper">
	<!-- 嵌套查詢:通過執(zhí)行另外一條SQL映射語句來返回預(yù)期的特殊類型 -->
	<select id="findPersonById" parameterType="Integer" 
                                      resultMap="IdCardWithPersonResult">
		SELECT * from tb_person where id=#{id}
	</select>
	<resultMap type="Person" id="IdCardWithPersonResult">
		<id property="id" column="id" />
		<result property="name" column="name" />
		<result property="age" column="age" />
		<result property="sex" column="sex" />
		<!-- 一對一:association使用select屬性引入另外一條SQL語句 -->
		<association property="card" column="card_id" javaType="IdCard"
			select="com.zsj.mapper.IdCardMapper.findCodeById" />
	</resultMap>
	
	<!-- 嵌套結(jié)果:使用嵌套結(jié)果映射來處理重復(fù)的聯(lián)合結(jié)果的子集 -->
	<select id="findPersonById2" parameterType="Integer" 
	                                   resultMap="IdCardWithPersonResult2">
	    SELECT p.*,idcard.code
	    from tb_person p,tb_idcard idcard
	    where p.card_id=idcard.id 
	    and p.id= #{id}
	</select>
	<resultMap type="Person" id="IdCardWithPersonResult2">
	    <id property="id" column="id" />
	    <result property="name" column="name" />
	    <result property="age" column="age" />
	    <result property="sex" column="sex" />
	    <association property="card" javaType="IdCard">
	        <id property="id" column="card_id" />
	        <result property="code" column="code" />
	    </association>
	</resultMap>	
</mapper>

輸出結(jié)果:

嵌套查詢:

嵌套結(jié)果:

從上面的調(diào)試日志可以看出,兩者不同方式的查詢SQL語句的難易程度和語句數(shù)。并且從代碼中不難看出兩者在編寫SQL語句代碼方面不同,嵌套查詢相較于嵌套結(jié)果來說,編寫較簡單?。?!

總結(jié)

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

參考文獻(xiàn):MyBatis官方文檔

相關(guān)文章

  • 利用Java反射機(jī)制實現(xiàn)對象相同字段的復(fù)制操作

    利用Java反射機(jī)制實現(xiàn)對象相同字段的復(fù)制操作

    這篇文章主要介紹了利用Java反射機(jī)制實現(xiàn)對象相同字段的復(fù)制操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • SpringBoot簡單實現(xiàn)定時器過程

    SpringBoot簡單實現(xiàn)定時器過程

    這篇文章主要介紹了SpringBoot簡單實現(xiàn)定時器過程,對于Java后端來說肯定實現(xiàn)定時功能肯定是使用到Spring封裝好的定時調(diào)度Scheduled
    2023-04-04
  • JAVA面試題之緩存擊穿、緩存穿透、緩存雪崩的三者區(qū)別

    JAVA面試題之緩存擊穿、緩存穿透、緩存雪崩的三者區(qū)別

    當(dāng)服務(wù)器QPS比較高,并且對數(shù)據(jù)的實時性要求不高時,往往會接入緩存以達(dá)到快速Response、降低數(shù)據(jù)庫壓力的作用,常用來做緩存的中間件如Redis等。本文主要介紹了JAVA面試時常考的緩存擊穿、穿透、雪崩場景三者區(qū)別,有興趣的小伙伴可以看一下
    2021-11-11
  • Java并發(fā)J.U.C并發(fā)容器類list set queue

    Java并發(fā)J.U.C并發(fā)容器類list set queue

    這篇文章主要為大家介紹了Java并發(fā),J.U.C并發(fā)容器類list set queue,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Java基礎(chǔ)篇之對象數(shù)組練習(xí)

    Java基礎(chǔ)篇之對象數(shù)組練習(xí)

    對象數(shù)組就是數(shù)組里的每個元素都是類的對象,賦值時先定義對象,然后將對象直接賦給數(shù)組就行了,這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)篇之對象數(shù)組練習(xí)的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Java NIO三大組件與ByteBuffer深入理解及使用

    Java NIO三大組件與ByteBuffer深入理解及使用

    這篇文章主要介紹了Java NIO三大組件與ByteBuffer,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • 關(guān)于MyBatis plus條件構(gòu)造器的逐條詳解

    關(guān)于MyBatis plus條件構(gòu)造器的逐條詳解

    什么是條件構(gòu)造器呢?簡單來說,條件構(gòu)造器就是用來生成我們查數(shù)據(jù)庫的sql。它可以簡化sql代碼的編寫,靈活、方便且易于維護(hù)
    2021-09-09
  • java 數(shù)據(jù)類型有哪些取值范圍多少

    java 數(shù)據(jù)類型有哪些取值范圍多少

    這篇文章主要介紹了java 數(shù)據(jù)類型有哪些取值范圍多少的相關(guān)資料,網(wǎng)上關(guān)于java 數(shù)據(jù)類型的資料有很多,不夠全面,這里就整理下,需要的朋友可以參考下
    2017-01-01
  • Java中文件讀寫操作與常用技巧分享

    Java中文件讀寫操作與常用技巧分享

    在 Java I/O 體系中,F(xiàn)ile 類是唯一代表磁盤文件本身的對象,而File 類定義了一些與平臺無關(guān)的方法來操作文件,所以下面我們一起來看看 File 類有哪些操作方法吧
    2023-06-06
  • Java String的intern用法解析

    Java String的intern用法解析

    這篇文章主要介紹了Java String的intern用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10

最新評論

大荔县| 建水县| 苏尼特右旗| 方山县| 蓬安县| 天长市| 广安市| 勃利县| 泰顺县| 乌拉特后旗| 霸州市| 淅川县| 迭部县| 唐山市| 镇平县| 新乡市| 西林县| 衡阳县| 南漳县| 大悟县| 佛山市| 台中市| 南宁市| 镇康县| 聂荣县| 济南市| 本溪市| 长阳| 大化| 夏邑县| 礼泉县| 水富县| 简阳市| 灵寿县| 榆中县| 苗栗县| 本溪市| 中超| 体育| 惠州市| 大宁县|