懶載入分析情況

2021-09-30 09:17:46 字數 2214 閱讀 4297

延遲載入也稱懶載入,他是hibernate為提高執行效率而提供的一種機制,即只有真正使用該物件的資料是才會建立。

hibernate中主要是通過**(proxy)機制來實現延遲載入的。它的具體過程是hibernate從資料庫獲取某乙個物件的資料時,獲取某乙個物件的集合屬性值時,或獲取某乙個所關聯的另乙個物件時,由於沒有使用該物件的資料(除標示符值外),hibernate並不從資料庫載入真正的資料,而只是為該物件建立乙個**,物件來代表這個物件,這個物件上的所有屬性都為預設值;只有在真正需要使用該物件的資料是才建立這個真是物件,真正從資料庫中載入他的資料。這樣在某些情況下,就可以提高插敘效率。

一、分析各種延遲載入策略的異同點

當沒有關聯關係的時候,lazy屬性應該設定在class標籤內,取值為true和false

true:系統預設,它表示支援懶載入功能,並建立**物件等操作。在呼叫其物件屬性的時候,才去查詢資料庫,並必須在session關閉之前

false:表示取消懶載入功能,當執行load方法的時候,直接就去資料庫中查詢並返回,與get()一樣

當在關聯關係中lazy則有三個屬性 proxy no-proxy false

no-proxy:當前物件的単值相關物件只有在呼叫它的屬性時才載入,需要位元組碼增強。

false:表示取消懶載入功能。

二、鑑別各種抓取策略的異同點,利用fetch屬性來設定抓取策略取值分別為:

select   表示二次select語句查詢

join 表示連線查詢。如果加上,則懶載入不起作用,直接將兩表連線查詢。

三、分析各種出現的情況系統採用處理方式:

在對映檔案中,用元素來配置一對多關聯關係。元素有lazy和fetch屬性

lazy:主要決定orders集合被初始化的時機。即到底是在載入customer物件時就被初始化,還是在程式訪問orders集合時被初始化。

fetch:取值為「select」或「subselect」時,決定初始化orders的查詢語句的形式;獲取值為「join」,則決定orders集合被初始化 的時機。

若把fetch設定為「join」,lazy屬性將被忽略

fetch

(預設值select)

lazy

(預設值是true)

策略

join

false

採用迫切左外聯接檢索。

join

true

採用迫切左外聯接檢索。

join

extra

採用迫切左外聯接檢索。

select

false

採用立即檢索

select

true

採用延遲檢索

select

extra

採用延遲檢索

c.getorders().size()  執行 select count(id) from orders where customer_id =?

for(order o:set) 將執行:

select customer_id , id,order_number ,price from orders  where customer_id=?

subselect

false/true/extra

也分為3中情況

巢狀子查詢(檢索多個customer物件時)lazy屬性決定檢索策略)

select customer_id,order_number,price from orders  where customer_id

in (select id from customers)

懶載入分析情況

延遲載入也稱懶載入,他是hibernate為提高執行效率而提供的一種機制,即只有真正使用該物件的資料是才會建立。hibernate中主要是通過 proxy 機制來實現延遲載入的。它的具體過程是hibernate從資料庫獲取某乙個物件的資料時,獲取某乙個物件的集合屬性值時,或獲取某乙個所關聯的另乙個物...

懶載入分析情況

懶載入分析情況 延遲載入也稱懶載入,他是hibernate為提高執行效率而提供的一種機制,即只有真正使用該物件的資料是才會建立。hibernate中主要是通過 proxy 機制來實現延遲載入的。它的具體過程是hibernate從資料庫獲取某乙個物件的資料時,獲取某乙個物件的集合屬性值時,或獲取某乙個...

ViewPager懶載入分析推薦

文章說明 本文修改自answerzhao scdn 開發者者公眾平台chian dvlp 概述 在專案中viewpager和fragment介面框架已經是處處可見,但是在使用中,我們肯定不希望使用者在當前頁面時就在前後頁面的資料,加入資料量很大,而使用者又不願意左右滑動瀏覽,那麼這時候viewpag...