一、延遲載的概述
延遲加載:lazy(懶加載)。執行到該行代碼的時候,不會發送語句去進行查詢,在真正使用這個對象的屬性的時候纔會 發送SQL語句進行查詢。
延遲加載的分類
1、類級別的延遲加載
指的是通過load方法查詢某個對象的時候,是否採用延遲。session.load(Customer.class,1l);
類級別延遲加載通過<class>上的lazy進行配置,如果讓lazy失效:
- 將lazy設置爲false
- 將持久化類使用final修飾
- Hibernate. Initialize()
2、關聯級別的延遲加載
指的是在查詢到某個對象的時候,查詢其關聯的對象的時候,是否採用延遲加載。
Customer customer = session.get(Customer.class,1l);
customer.getLinkMans();----通過客戶獲得聯繫人的時候,聯繫人對象是否採用了延遲加載,稱爲是關聯級別的延遲。
抓取策略往往會和關聯級別的延遲加載一起使用,優化語句。
二、抓取策略
抓取策略的概述
- 通過一個對象抓取到關聯對象需要發送SQL語句,SQL語句如何發送,發送成什麼樣格式通過策略進行配置。
- 通過<set>或者<many-to-one>上通過fetch屬性進行設置
- fetch和這些標籤上的lazy如何設置優化發送的SQL語句
- <set>上的fetch和lazy
- fetch:抓取策略,控制SQL語句格式
- select :默認值,發送普通的select語句,查詢關聯對象
- join :發送一條迫切左外連接查詢關聯對象
- subselect :發送一條子查詢查詢其關聯對象
- lazy:延遲加載,控制查詢關聯對象的時候是否採用延遲
- true :默認值,查詢關聯對象的時候,採用延遲加載
- false :查詢關聯對象的時候,不採用延遲加載
- extra :及其懶惰。
- 在實際開發中,一般都採用默認值。如果有特殊的需求,可能需要配置join。
- <many-to-one>上的fetch和lazy
- fetch :抓取策略,控制SQL語句格式。
- select :默認值,發送普通的select語句,查詢關聯對象。
- join :發送一條迫切左外連接。
- lazy :延遲加載,控制查詢關聯對象的時候是否採用延遲。
- proxy :默認值,proxy具體的取值,取決於另一端的<class>上的lazy的值。
- false :查詢關聯對象,不採用延遲。
- no-proxy :(不會使用)
- 在實際開發中,一般都採用默認值。如果有特殊的需求,可能需要配置join。
- 批量抓取
- 什麼是批量抓取
- 一批關聯對象一起抓取,batch-size
............從黑馬教程複製過來的筆記