mybatis 9 延遲載入

2021-08-01 10:24:10 字數 1895 閱讀 1691

延遲載入又叫懶載入,也叫按需載入。也就是說先載入主資訊,在需要的時候,再去載入從資訊。

在mybatis中,resultmap標籤 的association標籤和collection標籤具有延遲載入的功能

使用cglib建立目標物件的**物件,當呼叫目標方法時,進入***方法,比如呼叫a.getb().getname(),***invoke()方法發現a.getb()是null值,那麼就會單獨傳送事先儲存好的查詢關聯b物件的sql,把b查詢上來,然後呼叫a.setb(b),於是a的物件b屬性就有值了,接著完成a.getb().getname()方法的呼叫。這就是延遲載入的基本原理。

在進行資料查詢時,為了提高資料庫查詢效能,盡量使用單錶查詢,因為單錶查詢比多表關聯查詢速度要快。

如果查詢單錶就可以滿足需求,一開始先查詢單錶,當需要關聯資訊時,再關聯查詢,當需要關聯資訊再查詢這個叫延遲載入。

mybatis中resultmap提供延遲載入功能,通過resultmap配置延遲載入。

查詢訂單及使用者的資訊,一對一查詢。

剛開始只查詢訂單資訊

當需要使用者時呼叫 orders類中的getuser()方法執行延遲載入 ,向資料庫發出sql。

實際sql:

一對多延遲載入的方法同一對一延遲載入,在collection標籤中配置select內容。

延遲載入:

延遲載入實現的方法多種多樣,在只查詢單錶就可以滿足需求,為了提高資料庫查詢效能使用延遲載入,再查詢關聯資訊。

mybatis提供延遲載入的功能用於service層。

resulttype:

作用:將查詢結果按照sql列名pojo屬性名一致性對映到pojo中。

場合:

常見一些明細記錄的展示,將關聯查詢資訊全部展示在頁面時,此時可直接使用

resulttype

將每一條記錄對映到

pojo

中,在前端頁面遍歷

list

(list

中是pojo

)即可。

resultmap:

使用association和collection完成一對一和一對多高階對映。

association:

作用:將關聯查詢資訊對映到乙個pojo類中。

場合:

為了方便獲取關聯資訊可以使用

association

將關聯訂單對映為

pojo

,比如:查詢訂單及關聯使用者資訊。

collection:

作用:將關聯查詢資訊對映到乙個list集合中。

場合:

為了方便獲取關聯資訊可以使用

collection

將關聯資訊對映到

list

集合中,比如:查詢使用者許可權範圍模組和功能,可使用

collection

將模組和功能列表對映到

list中。

源**檔案:

Mybatis延遲載入

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

mybatis延遲載入

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

mybatis延遲載入

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