1. 程式人生 > >Hibernate的抓取策略(優化)

Hibernate的抓取策略(優化)

als 如何 lazy 左外連接 fetch nal 修飾 級別 持久化類

延遲加載的概述

什麽是延遲加載

延遲加載:lazy(懶加載)。執行到該行代碼的時候,不會發送語句去進行查詢,在真正使用這個對象的屬性的時候才會發送SQL語句進行查詢。

延遲加載的分類

l 類級別的延遲加載

n 指的是通過load方法查詢某個對象的時候,是否采用延遲。session.load(Customer.class,1l);

n 類級別延遲加載通過<class>上的lazy進行配置,如果讓lazy失效

u 將lazy設置為false

u 將持久化類使用final修飾

u Hibernate. Initialize()

l 關聯級別的延遲加載

n 指的是在查詢到某個對象的時候,查詢其關聯的對象的時候,是否采用延遲加載。

Customer customer = session.get(Customer.class,1l);

customer.getLinkMans();----通過客戶獲得聯系人的時候,聯系人對象是否采用了延遲加載,稱為是關聯級別的延遲。

n 抓取策略往往會和關聯級別的延遲加載一起使用,優化語句。

抓取策略

抓取策略的概述

l 通過一個對象抓取到關聯對象需要發送SQL語句,SQL語句如何發送,發送成什麽樣格式通過策略進行配置。

n 通過<set>或者<many-to-one>上通過fetch屬性進行設置

n fetch和這些標簽上的lazy如何設置優化發送的SQL語句

<set>上的fetch和lazy

l fetch:抓取策略,控制SQL語句格式

n select :默認值,發送普通的select語句,查詢關聯對象

n join :發送一條迫切左外連接查詢關聯對象

n subselect :發送一條子查詢查詢其關聯對象

l lazy:延遲加載,控制查詢關聯對象的時候是否采用延遲

n true :默認值,查詢關聯對象的時候,采用延遲加載

n false :查詢關聯對象的時候,不采用延遲加載

n extra :及其懶惰。

l 在實際開發中,一般都采用默認值。如果有特殊的需求,可能需要配置join

<many-to-one>上的fetch和lazy

l fetch :抓取策略,控制SQL語句格式。

n select :默認值,發送普通的select語句,查詢關聯對象。

n join :發送一條迫切左外連接。

l lazy :延遲加載,控制查詢關聯對象的時候是否采用延遲。

n proxy :默認值,proxy具體的取值,取決於另一端的<class>上的lazy的值。

n false :查詢關聯對象,不采用延遲。

n no-proxy :(不會使用)

l 在實際開發中,一般都采用默認值。如果有特殊的需求,可能需要配置join

批量抓取

什麽是批量抓取

一批關聯對象一起抓取,batch-size

測試批量抓取

技術分享圖片

Hibernate的抓取策略(優化)