mybatis的延遲載入

2021-08-20 21:55:28 字數 655 閱讀 7932

aggressivelazyloading:這個引數的含義是,當該引數設定為true時,對任意延遲屬性的呼叫會使帶有延遲載入屬性的物件完整載入

,反之,每種屬性都將按需載入。當我們從資料庫中查詢到資料後會給實體類中關聯物件賦值,會呼叫關聯物件屬性的setter方法,這會觸發上述規則,導致本該延遲載入的屬性直接載入,為了避免這種情況,需要將其設定為false。

lazyloadingenabled

:這個屬性是開啟全域性延遲載入,不用手動在單個關聯中配置。

lazyloadtriggermethods

:這個引數的含義是當呼叫配置中的方法時,載入全部的延遲載入資料。預設值是「equals,clone,hashcode,tostring」。

延遲載入有時候會取不到值的問題:mybatis延遲載入時通過動態**實現的,當呼叫配置為延遲載入的屬性方法時,動態**的操作會被觸發,這些額外的操作就是通過mybatis的sqlsession去執行巢狀的sql的。由於在和某些框架整合時,sqlsession的生命週期交給了框架來管理,因此當物件超出sqlsession生命週期呼叫時,會由於鏈結關閉等問題而丟擲異常。在和spring整合時,要確保只能在service層呼叫延遲載入的屬性。當結果從service層返回至controller層時,如果獲取延遲載入的屬性值,會因為sqlsession已經關閉而丟擲異常。

Mybatis延遲載入

現在有這麼乙個需求,要查詢所有的訂單,並且獲得該訂單的詳細資訊。如果一次性把所有需要的資料都請求到,那麼對伺服器和資料庫的開銷會很大,所以可以先載入訂單資訊,需要用到訂單詳情的時候再請求詳情資料。那麼就要用到mybatis的延遲載入 name lazyloadingenabled value tru...

mybatis延遲載入

舉個例子 如果查詢訂單並且關聯查詢使用者資訊。如果先查詢訂單資訊即可滿足要求,當我們需要查詢使用者資訊時再查詢使用者資訊。把對使用者資訊的按需去查詢就是延遲載入。所以延遲載入即先從單錶查詢 需要時再從關聯表去關聯查詢,大大提高資料庫效能,因為查詢單錶要比關聯查詢多張表速度要快。我們來對比一下 關聯查...

mybatis延遲載入

在mybatis中,通常會進行多表聯合查詢,但是有的時候並不會立即用到所有的聯合查詢結果,此時需要一種機制,當需要的時候再查詢,這種 按需查詢 的機制,就可以使用延遲載入來實現。延遲載入可以做到,先從單錶查詢,需要時再從關聯表關聯查詢,這樣可以大大提高資料庫的效能,因為查詢單錶要比關聯查詢多張表速度...