1. 延遲載入先獲取到**物件,當真正使用到該物件中的屬性的時候,才會傳送sql語句,是hibernate框架提公升效能的方式
2. 類級別的延遲載入
session物件的load方法預設就是延遲載入
customer c = session.load(customer.class, 1l);沒有傳送sql語句,當使用該物件的屬性時,才傳送sql語句
使類級別的延遲載入失效
在標籤上配置lazy=」false」
hibernate.initialize(object proxy);
3. 關聯級別的延遲載入(查詢某個客戶,當檢視該客戶下的所有聯絡人是是否是延遲載入)
預設是延遲載入
session session = hibernateutils.getcurrentsession();
transaction tr = session.begintransaction();
customer c = session.get(customer.class, 1l);
system.out.println("**********===");
system.out.println(c.getlinkmans().size());
tr.commit();
1. 查詢策略:使用hibernate查詢乙個物件的時候,查詢其關聯物件.應該如何查詢.是hibernate的一種優化手段!!!
2. hibernate框架的檢索策略解決的問題
查詢的時機
customer c1 = (customer) session.get(customer.class, 1);
system.out.println(c1.getlinkmans().size());
lazy屬性解決查詢的時機的問題,需要配置是否採用延遲載入!!
查詢的語句形式
listlist = session.createquery("from customer").list();
for(customer c : list)
fetch屬性就可以解決查詢語句的形式的問題!!
1. 在標籤上使用fetch和lazy屬性
fetch的取值-- 控制sql語句生成的格式
select-- 預設值.傳送查詢語句
join-- 連線查詢.傳送的是一條迫切左外連線!!!配置了join.lazy就失效了
subselect-- 子查詢.傳送一條子查詢查詢其關聯物件.(需要使用list()方法進行測試)
lazy的取值-- 查詢關聯物件的時候是否採用延遲!
true-- 預設.延遲
false-- 不延遲
extra-- 及其延遲
2. set標籤上的預設值是fetch="select"和lazy="true"
3. 總結:hibernate框架都採用了預設值,開發中基本上使用的都是預設值。特殊的情況。
1. 在標籤上使用fetch和lazy屬性
fetch的取值-- 控制sql的格式.
select-- 預設。傳送基本select語句查詢
join-- 傳送迫切左外連線查詢
lazy的取值-- 控制載入關聯物件是否採用延遲.
false-- 不採用延遲載入.
proxy-- 預設值.**.現在是否採用延遲.
由另一端的上的lazy確定.如果這端的class上的lazy=」true」.proxy的值就是true(延遲載入).
如果class上lazy=」false」.proxy的值就是false(不採用延遲.)
2. 在標籤上的預設值是fetch="select"和proxy
Hibernate框架 查詢優化
一 類級別查詢 get方法 沒有任何策略,呼叫即立即查詢資料庫載入資料。load方法 應用類級別的載入策略 lazy 預設值 true,查詢類時,會返回 物件,會在使用屬性時,根據關聯的session查詢資料庫,載入資料 lazy false.load方法會與get方法沒有任何區別,呼叫時即載入資料...
Hibernate的查詢優化策略
2.抓取策略 3.批量抓取 延遲載入 也稱為懶載入 是hibernate關聯關係物件預設的載入方式,延遲載入機制是為了避免一些無謂的效能開銷而提出來的,所謂延遲載入就是當在真正需要資料的時候,才真正執行資料載入操作。通常將延遲載入分為兩類 一類叫做類級別延遲,另一類叫做關聯級別的延遲。類級別的延遲指...
十一 Hibernate查詢優化之策略設定
使用hibernate查詢乙個物件的時候,查詢其關聯物件.應該如何查詢,可以通過配置對映檔案的屬性來設定。lazy屬性 解決查詢的時機的問題,是否延遲載入關聯資料,例如下面2條語句 customer c1 customer session.get customer.class,1 system.ou...