mybatis的嵌套查詢與嵌套結果查詢的不同


原文:https://blog.csdn.net/qq_39706071/article/details/85156840

實體類:在這里插入圖片描述

嵌套查詢mapper方法:在這里插入圖片描述
嵌套查詢的弊端:即嵌套查詢的N+1問題
盡管嵌套查詢大量的簡化了存在關聯關系的查詢,但它的弊端也比較明顯:即所謂的N+1問題。關聯的嵌套查詢顯示得到一個結果集,然后根據這個結果集的每一條記錄進行關聯查詢。
現在假設嵌套查詢就一個(即resultMap 內部就一個association標簽),現查詢的結果集返回條數為N,那么關聯查詢語句將會被執行N次,加上自身返回結果集查詢1次,共需要訪問數據庫N+1次。如果N比較大的話,這樣的數據庫訪問消耗是非常大的!所以使用這種嵌套語句查詢的使用者一定要考慮慎重考慮,確保N值不會很大。

嵌套結果查詢:
嵌套語句的查詢會導致數據庫訪問次數不定,進而有可能影響到性能。Mybatis還支持一種嵌套結果的查詢:即對於一對多,多對多,多對一的情況的查詢,Mybatis通過聯合查詢,將結果從數據庫內一次性查出來,然后根據其一對多,多對一,多對多的關系和ResultMap中的配置,進行結果的轉換,構建需要的對象。

比如:此就是嵌套結果查詢
在這里插入圖片描述
在這里插入圖片描述
對於關聯的結果查詢,如果是多對一的關系,則通過形如 進行配置,Mybatis會通過column屬性對應的user_id 值去從內存中取數據,並且封裝成User_order對象;

如果是一對多的關系,就如User和User_order之間的關系,通過形如 進行配置,MyBatis通過 id去內存中取User_orders對象,封裝成List;

對於關聯結果的查詢,只需要查詢數據庫一次,然后對結果的整合和組裝全部放在了內存中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM