1. 程式人生 > >Hibernate框架學習(十)——查詢優化

Hibernate框架學習(十)——查詢優化

語句 沒有 sql語句 抓取 select 數量 客戶 使用 懶加載

一、類級別查詢

1、get方法:沒有任何策略,調用即立即查詢數據庫加載數據。

技術分享圖片

2、load方法:是在執行時不發送任何SQL語句,返回一個對象,使用該對象時才執行查詢;應用類級別的加載策略。

技術分享圖片

1>延遲加載:僅僅獲得,沒有使用,不會查詢,在使用時才進行查詢
2>是否對類進行延遲加載:可以通過在class元素上配置lazy屬性來控制

技術分享圖片

  lazy(默認):true 查詢類時會返回代理對象,會在使用屬性時根據關聯的session查詢數據庫,加載數據

           加載時不查詢,使用時才查詢

  lazy:false 加載時立即查詢,和get方法沒有區別

  結論:為了提高效率,建議使用延遲加載(懶加載)

3>註意:使用懶加載時要確保,調用屬性加載數據時,session還是打開的,不然會拋出異常。

技術分享圖片

二、關聯級別查詢

1、集合策略

lazy屬性:決定是否延遲加載
    true(默認):延遲加載,懶加載
    false:立即加載
    extra:極其懶惰,與懶加載效果基本一致
fetch屬性:決定加載策略,使用什麽類型的SQL語句加載集合數據
    select(默認):單表查詢加載
    join:使用多表查詢加載集合
    subselect:使用子查詢加載集合

2、關聯屬性策略

lazy屬性:決定加載時機
  false:立即加載

  proxy:由Customer的類級別加載策略決定

fetch屬性:決定加載的SQL語句
  select:使用單表查詢
  join:使用多表查詢

3、結論

為了提高效率,fetch應選擇select,lazy應選擇 true,全部使用默認值。

4、no-session問題解決

擴大session的作用範圍

技術分享圖片

三、批量抓取

batch-size:抓取集合的數量
      在抓取客戶的集合時,一次抓取幾個客戶的聯系人集合

Hibernate框架學習(十)——查詢優化