Mybatis對于處理一對多的情況有三種解決方案:
查詢的時候join子表,然后交由mybatis拼裝
查詢的時候不join子表,另外發(fā)起select去抓取子表數(shù)據(jù)
和第二種類似,只不過利用fetchType=lazy來延緩抓取的時機(jī)
這三種方案各有問題:
第一種方案有兩個缺陷:1) 做分頁查詢的時候不準(zhǔn),2) 如果關(guān)聯(lián)子表多,笛卡爾積會非常大
第二種方案會出現(xiàn)1+N次查詢,發(fā)起的sql數(shù)量會非??植?/p>
第三種方案看似提升了第一次查詢的效率,但是如果在循環(huán)里get lazy property,那么和第二種方案沒有什么區(qū)別
因此如果對性能上有要求, 需要由我們自己去拼裝一對多的集合,處理的辦法是:把主表的ID都收集起來, 發(fā)起一次性查詢把所有子表的數(shù)據(jù)抓取出來,然后人工拼裝。這樣發(fā)起的查詢數(shù)量就是1+1。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/70072.html
摘要:最終能和面試官聊的開心愉快投緣的叫面霸。能夠與很好的集成提供映射標(biāo)簽,支持對象與數(shù)據(jù)庫的字段關(guān)系映射提供對象關(guān)系映射標(biāo)簽,支持對象關(guān)系組件維護(hù)。使用可以有效的防止注入,提高系統(tǒng)安全性。 showImg(https://segmentfault.com/img/bVbsSlt?w=358&h=269); 一、概述 面試,難還是不難?取決于面試者的底蘊(yùn)(氣場+技能)、心態(tài)和認(rèn)知及溝通技巧。...
摘要:執(zhí)行沒有,批處理不支持,將所有都添加到批處理中,等待統(tǒng)一執(zhí)行,它緩存了多個對象,每個對象都是完畢后,等待逐一執(zhí)行批處理。 Mybatis常見面試題 #{}和${}的區(qū)別是什么? #{}和${}的區(qū)別是什么? 在Mybatis中,有兩種占位符 #{}解析傳遞進(jìn)來的參數(shù)數(shù)據(jù) ${}對傳遞進(jìn)來的參數(shù)原樣拼接在SQL中 #{}是預(yù)編譯處理,${}是字符串替換。 使用#{}可以有效的防止...
摘要:數(shù)據(jù)庫關(guān)系模型中有一對一一對多關(guān)系首先建立如下表繼續(xù)用最經(jīng)典的學(xué)生管理系統(tǒng)建表模型圖如圖所示學(xué)生表為中心學(xué)生證表和其為一對一關(guān)系學(xué)生表和課程表為一對多一對一關(guān)系因?yàn)樯蠄D中學(xué)生和學(xué)生關(guān)系為一對一關(guān)系由于是數(shù)據(jù)庫的一對一關(guān)系那么對應(yīng)的中也應(yīng)該是 數(shù)據(jù)庫關(guān)系模型中有一對一,一對多,關(guān)系,首先建立如下表 繼續(xù)用最經(jīng)典的學(xué)生管理系統(tǒng) 建表 模型圖如圖所示showImg(https://segme...
摘要:場合常見一些明細(xì)記錄的展示,比如用戶購買商品明細(xì),將關(guān)聯(lián)查詢信息全部展示在頁面時,此時可直接使用將每一條記錄映射到中,在前端頁面遍歷中是即可。作用將關(guān)聯(lián)查詢信息映射到一個對象中。 相關(guān)閱讀: 1、通過項(xiàng)目逐步深入了解Mybatis 2、 通過項(xiàng)目逐步深入了解Mybatis 本項(xiàng)目所有代碼及文檔都托管在 Github地址:https://github.com/zhisheng17/myb...
閱讀 982·2023-04-25 23:55
閱讀 2710·2023-04-25 14:13
閱讀 3297·2019-08-26 13:47
閱讀 2972·2019-08-23 18:16
閱讀 628·2019-08-23 17:20
閱讀 3228·2019-08-23 16:55
閱讀 3146·2019-08-22 15:39
閱讀 3196·2019-08-20 18:10