Hibernate的抓取策略(優化)
延遲加載的概述
什麽是延遲加載
延遲加載: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的抓取策略(優化)