Hibernate框架學習(十)——查詢優化
一、類級別查詢
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:立即加載
fetch屬性:決定加載的SQL語句
select:使用單表查詢
join:使用多表查詢
3、結論
為了提高效率,fetch應選擇select,lazy應選擇 true,全部使用默認值。
4、no-session問題解決
擴大session的作用範圍
三、批量抓取
batch-size:抓取集合的數量
在抓取客戶的集合時,一次抓取幾個客戶的聯系人集合
Hibernate框架學習(十)——查詢優化