Mybatis延遲載入

2021-10-25 02:05:59 字數 4066 閱讀 4879

什麼是延遲載入呢?

通俗的講就是按需載入,我們需要什麼的時候再去進行什麼操作。

什麼時候會用到延遲載入呢?

多表單獨查詢的時候。

而且先從單錶查詢,需要時再從關聯表去關聯查詢,能大大提高資料庫效能,因為查詢單錶要比關聯查詢多張表速度要快。

延遲載入分為兩種:深度延時載入,侵入式延遲載入

如何開啟延時載入?

兩種方法:

1.在collection標籤中:

"selectbyminorid"

resultmap

="selectminormap"

>

select cid,cname from country where cid =#

select

>

"selectminormap"

type

="country"

>

column

="cid"

property

="cid"

/>

column

="cname"

property

="cname"

/>

column

="cid"

property

="mino"

oftype

="minor"

select

="selectbyminorids"

fetchtype

="lazy"

/>

//使用fetch屬性的值為true,預設開啟深度延遲載入

resultmap

>

"selectbyminorids"

resulttype

="com.example.mytest01.pojo.minor"

>

select mname from minor where countryid =#

select

>

2.mybatis.xml中進行配置

>

name

="lazyloadingenabled"

value

="true"

/>

name

="aggressivelazyloading"

value

="true"

/>

settings

>

載入特點侵入式延遲: 執行對主載入物件的查詢時,不會執行對關聯物件的查詢。但當要訪問主載入物件的詳情屬性時,就會馬上執行關聯物件的select查詢。

深度延遲: 執行對主載入物件的查詢時,不會執行對關聯物件的查詢。訪問主載入物件的詳情時也不會執行關聯物件的select查詢。只有當真正訪問關聯物件的詳情時,才會執行對關聯物件的 select 查詢。

mybatis 的延遲載入只是對關聯物件的查詢有遲延設定,對於主載入物件都是直接執行查詢語句的。

<?xml version="1.0" encoding="utf-8" ?>

就可以直接填寫縮寫,不區分大小寫,直接通過方法名去找型別-->

namespace

="com.example.mytest01.dao.iminordao"

>

"selectbyminorid"

resultmap

="selectminormap"

>

select cid,cname from country where cid =#

select

>

"selectminormap"

type

="country"

>

column

="cid"

property

="cid"

/>

column

="cname"

property

="cname"

/>

column

="cid"

property

="mino"

oftype

="minor"

select

="selectbyminorids"

/>

resultmap

>

"selectbyminorids"

resulttype

="com.example.mytest01.pojo.minor"

>

select mname from minor where countryid =#

select

>

>

當不開啟延遲載入時:

進行兩次查詢;

進行兩次查詢;

重點來了:

當開深度啟延遲載入時:

通過日誌觀察到,只查詢一次,還未進行第二次查詢;

當查詢主載入物件的詳情屬性時,依舊只進行了第一次的查詢;

看到這裡我們會發現:只有當查詢主載入物件的關聯屬性時,才進行了兩次查詢

當開啟侵入式延遲載入時:
@autowired

通過日誌觀察到,只查詢一次,還未進行第二次查詢;

與深度延遲載入不同的時:當查詢主屬性的詳細資訊時,mybatis就已經進行了第二次的關聯屬性的查詢;

Mybatis延遲載入

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

mybatis延遲載入

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

mybatis延遲載入

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