Mybatis延遲載入

2021-07-03 13:51:40 字數 1445 閱讀 2111

現在有這麼乙個需求,要查詢所有的訂單,並且獲得該訂單的詳細資訊。

如果一次性把所有需要的資料都請求到,那麼對伺服器和資料庫的開銷會很大,所以可以先載入訂單資訊,需要用到訂單詳情的時候再請求詳情資料。

那麼就要用到mybatis的延遲載入

name="lazyloadingenabled"

value="true"/>

name="aggressivelazyloading"

value="false"/>

select * from orders

select>

select * from orderdetail where orders_id = #

select>

然後配置orderuserresultmap,傳統的方式在orderuserresultmap的collection配置級聯屬性,例如

property="orderdetails"

oftype="cn.elinzhou.mybatistest.pojo.orderdetailcustom">

column="orderdetail_id"

property="id"/>

column="orderdetail_orders_id"

property="orders_id"/>

column="orderdetail_items_id"

property="items_id"/>

column="orderdetail_items_num"

property="items_num"/>

collection>

如果這樣的所有的資料將一次性查詢,所以這裡可以通過呼叫之前定義過的finddetailbyordreid並通過延遲載入訂單詳情資料。

把上述的collection**改為

property="orderdetails"

column="id"

oftype="cn.elinzhou.mybatistest.pojo.orderdetailcustom"

collection>

這樣就實現了延遲載入,下面對**進行測試。

@test

public

void

testfindorders() throws exception

在上述**的第乙個注釋前打乙個斷點,然後逐行執行**觀察日誌

剛剛執行的**只是為了列印出list中的內容,就對資料庫進行檢索,說明這是通過延遲載入實現。在真正需要用到orderdetail時才會去查orderdetail表,實現了按需分配。直到需要的時候才執行必要的**,提高了伺服器和資料庫的效率。

mybatis延遲載入

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

mybatis延遲載入

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

Mybatis延遲載入

問 為什麼需要延遲載入呢?答 當你查詢的結果包含了所有屬性,可是在實際操作的時候只用到了其中一部分,那載入進來的資料就是多餘資料,只會占用記憶體。那如何做到在需要的時候載入包含物件屬性的屬性?兩個方法 第一種 全域性配置 關聯的值在使用的時候被延遲載入true name lazyloadingena...