原文: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;
對於關聯結果的查詢,只需要查詢數據庫一次,然后對結果的整合和組裝全部放在了內存中。