延遲載入
(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,即預設開啟延遲載入。使用...