一、什麼是延遲載入
resultmap可實現高階對映(使用association、collection實現一對一及一對多對映),association、collection具備延遲載入功能。
需求:如果查詢訂單並且關聯查詢使用者資訊。如果先查詢訂單資訊即可滿足要求,當我們需要查詢使用者資訊時再查詢使用者資訊。把對使用者資訊的按需去查詢就是延遲載入。
延遲載入:先從單錶查詢,需要時再從關聯表去關聯查詢,大大提高資料庫
效能,因為查詢單錶要比關聯查詢多張表速度要快。
二、使用association實現延遲載入
1、需求:查詢訂單並且關聯查詢使用者資訊
1) 只查詢訂單資訊
select * from orders
在查詢訂單的statement中使用association去延遲載入(執行)下邊的statement。
[html]view plain
copy
print?
<
select
id="findordersuserlazyloading"
resultmap="orderuserlazyloadingresultmap"
>
select * from orders
select
>
select * from orders
resultmap怎麼寫,看下面的3。
2) 關聯查詢使用者資訊
通過上邊查詢到的訂單資訊中user_id去關聯查詢使用者資訊
[html]view plain
copy
print?
<
select
id="finduserbyid"
resulttype="user"
parametertype="int"
>
select * from user where id=#
select
>
select * from user where id=#
3) 執行思路:
上邊先去執行findordersuserlazyloading,當需要的時候再去執行finduserbyid,通過resultmap的定義將延遲載入執行配置起來。
3、延遲載入的resultmap
[html]view plain
copy
print?
<
resultmap
type="cn.itcast.mybatis.po.orders"
id="orderuserlazyloadingresultmap"
>
<
idcolumn="id"
property="id"
/>
<
result
column="user_id"
property="userid"
/>
<
result
column="number"
property="number"
/>
<
result
column="createtime"
property="createtime"
/>
<
result
column="note"
property="note"
/>
使用association
中是select
指定延遲載入去執行的
statement的id
。 4、開啟延遲載入開關
[html]view plain
copy
print?
<
settings
>
<
setting
name="lazyloadingenabled"
value="true"
/>
<
setting
name="aggressivelazyloading"
value="false"
/>
settings
>
aggressivelazyloading:預設為true。當設定為true時,懶載入的物件可能被任何懶屬性全部載入;否則,每個屬性按需載入。
三、使用collection實現延遲載入
同理。四、思考總結
1.不使用mybatis提供的association及collection中的延遲載入功能,如何實現延遲載入?
實現思路:
1) 查詢訂單列表 2)根據使用者id查詢使用者資訊
2.總結
使用延遲載入方法,先去查詢簡單的sql(最好單錶,也可關聯查詢),再去按需載入關聯查詢的其他資訊。
DLL 延時載入
1.exe載入多個dll時,初始化可能會比較慢 2.exe載入老版本dll時,如果沒有相應的匯出函式,exe可以做相應處理後繼續執行。侷限性1 匯出全域性變數不能延遲。2 kernel32.dll 不能延遲,loadlibrary and getprocaddress 3 不能在dllmain中呼叫...
延時載入(lazy load)
1.什麼是延時載入?相關背景 當專案中的頁面需要載入大量的時,如果不進行相關的優化處理,顯然頁面的效能和對使用者的體驗是非常不友好的。如果3s還沒有載入完成,使用者很可能直接關掉你的頁面。優化的方式有很多,首先從源頭來講,可以對載入的資訊進行優化處理,精簡減少冗餘。和 延時載入。定義 延時載入 即 ...
Android 中載入延時載入動畫
我們現在應用程式載入之前一般都有splash。我們今天就用乙個例項來給大家講述一下splash。在應用程式載入之前一般都有splash。源 如下 package com.easyway.splash import com.easyway.splash.r import android.content...