Mybatis處理一對多關係時的效能考慮

2021-09-16 22:22:13 字數 431 閱讀 5158

mybatis對於處理一對多的情況有三種解決方案:

查詢的時候join子表,然後交由mybatis拼裝

查詢的時候不join子表,另外發起select去抓取子表資料

和第二種類似,只不過利用fetchtype=lazy來延緩抓取的時機

這三種方案各有問題:

第一種方案有兩個缺陷:1) 做分頁查詢的時候不准,2) 如果關聯子表多,笛卡爾積會非常大

第二種方案會出現1+n次查詢,發起的sql數量會非常恐怖

第三種方案看似提公升了第一次查詢的效率,但是如果在迴圈裡get lazy property,那麼和第二種方案沒有什麼區別

因此如果對效能上有要求, 需要由我們自己去拼裝一對多的集合,處理的辦法是:把主表的id都收集起來, 發起一次性查詢把所有子表的資料抓取出來,然後人工拼裝。這樣發起的查詢數量就是1+1。

MyBatis多對一和一對多關係的處理

前期準備 資料庫關係 可以看到employee是參照department表的,是多對一的關係 實體類com.maple.pojo.department data public class department com.maple.pojo.employee data public class emp...

sqlalchemy 一對多 關係

import os import sqlalchemy from sqlalchemy import create engine,column,integer,string,foreignkey,sequence from sqlalchemy.ext.declarative import decl...

Mvc Entityfraome一對多關係對映

第一資料庫建立 第二建立mvc ef專案 注意要點 如下資料庫表 t classes,t students 建立兩個類與資料庫表相對應 public class class public string name public virtual icollectionstudent new list p...