Hibernate的抓取策略

一、延遲載的概述

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

延遲加載的分類

1、類級別的延遲加載

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

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

  1. 將lazy設置爲false
  2. 將持久化類使用final修飾
  3. Hibernate. Initialize()

2、關聯級別的延遲加載

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

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

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

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

二、抓取策略

抓取策略的概述

  • 通過一個對象抓取到關聯對象需要發送SQL語句,SQL語句如何發送,發送成什麼樣格式通過策略進行配置。
    • 通過<set>或者<many-to-one>上通過fetch屬性進行設置
    • fetch和這些標籤上的lazy如何設置優化發送的SQL語句
      1. <set>上的fetch和lazy
  • fetch:抓取策略,控制SQL語句格式
    • select               :默認值,發送普通的select語句,查詢關聯對象
    • join                   :發送一條迫切左外連接查詢關聯對象
    • subselect         :發送一條子查詢查詢其關聯對象
  • lazy:延遲加載,控制查詢關聯對象的時候是否採用延遲
    • true                  :默認值,查詢關聯對象的時候,採用延遲加載
    • false                 :查詢關聯對象的時候,不採用延遲加載
    • extra                 :及其懶惰。
  • 在實際開發中,一般都採用默認值。如果有特殊的需求,可能需要配置join
    1. <many-to-one>上的fetch和lazy
  • fetch :抓取策略,控制SQL語句格式。
    • select       :默認值,發送普通的select語句,查詢關聯對象。
    • join          :發送一條迫切左外連接。
  • lazy   :延遲加載,控制查詢關聯對象的時候是否採用延遲。
    • proxy       :默認值,proxy具體的取值,取決於另一端的<class>上的lazy的值。
    • false         :查詢關聯對象,不採用延遲。
    • no-proxy  :(不會使用)
  • 在實際開發中,一般都採用默認值。如果有特殊的需求,可能需要配置join
  • 批量抓取
  • 什麼是批量抓取
  • 一批關聯對象一起抓取,batch-size

............從黑馬教程複製過來的筆記

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章