Mybatis對於處理一對多的狀況有三種解決方案:sql
查詢的時候join子表,而後交由mybatis拼裝mybatis
查詢的時候不join子表,另外發起select去抓取子表數據性能
和第二種相似,只不過利用fetchType=lazy
來延緩抓取的時機fetch
這三種方案各有問題:code
第一種方案有兩個缺陷:1) 作分頁查詢的時候不許,2) 若是關聯子表多,笛卡爾積會很是大get
第二種方案會出現1+N次查詢,發起的sql數量會很是恐怖效率
第三種方案看似提高了第一次查詢的效率,可是若是在循環裏get lazy property,那麼和第二種方案沒有什麼區別select
所以若是對性能上有要求, 須要由咱們本身去拼裝一對多的集合,處理的辦法是:把主表的ID都收集起來, 發起一次性查詢把全部子表的數據抓取出來,而後人工拼裝。這樣發起的查詢數量就是1+1。循環