iBATIS延遲載入的那點事

2021-05-11 02:12:41 字數 1046 閱讀 6766

延遲載入

(lazy load)

是hibernate3

關聯關係物件預設的載入方式,延遲載入機制是為了避免一些無謂的效能開銷而提出來的,在我們執行

sqlmap.queryforlist()

時,實際上

ibatis

只向資料庫傳送了一條

select id, name, *** from t_user sql

。而用於獲取

address

記錄的sql

,只有在我們真正訪問

address

物件時,才開始執行。

這也就是所謂的延遲載入(

lazy loading

)機制。即當真正需要資料的時候,才載入資料。延遲載入機制能為我們的系統效能帶來極大的提公升。試想,如果我們只需要獲取使用者名稱和性別資料,在沒有延遲載入特性的情況下,

ibatis

會一次將所有資料都從資料庫取回,包括使用者資訊及其相關的位址資料,而此時,關於位址資料的讀取操作沒有意義,也就是說,我們白白在位址資料的查詢讀取上浪費了大量的系統資源。延遲載入為我們妥善的處理了效能與編碼上的平衡(如果沒有延遲載入,我們為了避免無謂的效能開銷,只能專門為此再增加乙個不讀取位址資訊的使用者記錄檢索模組,無疑增加了編碼上的工作量)。 「

ibatis

配置」中的內容: ⑴

……enhancementenabled="true"

lazyloadingenabled="true"

……/>

settings

節點有兩個與延遲載入相關的屬性

lazyloadingenabled 和

enhancementenabled

,其中lazyloadingenabled

設定了系統是否使用延遲載入

機制,enhancementenabled

設定是否啟用位元組碼強化機制(通過位元組碼強化機制可 以為

lazy loading

帶來效能方面的改進。

為了使用延遲載入所帶來的效能優勢,這兩項都建議設為

"true"。

Ibatis延遲載入

延遲載入 在執行上篇的例子時,通過觀察期間的日誌輸出順序我們可以發現,在我們執行sqlmap.queryforlist user.getusers 時,實際上ibatis只向資料庫傳送了一條select id,name,from t user sql。而用於獲取address記錄的sql,只有在我們...

ibatis的延遲載入

ibatis也支援延遲載入,可以在sqlmapconfig.xml中配置lazyloadingenabled來設定,預設情況下為true,即預設開啟延遲載入。使用延遲載入時要求符合一定的規範,如果直接使用連線語句查詢出所有物件的話就不能延遲載入了。select userid from demouse...

iBATIS也支援延遲載入

配置完ibatis的關係後,做單元測試發現關聯的物件並沒有被查詢出來,review了一遍,沒發現有什麼問題,查了一下,發現是延遲載入的問題 ibatis支援延遲載入,可以在sqlmapconfig.xml中配置lazyloadingenabled來設定,預設情況下為true,即預設開啟延遲載入。使用...