十一 Hibernate查詢優化之策略設定

2021-09-02 15:07:29 字數 1459 閱讀 4089

使用hibernate查詢乙個物件的時候,查詢其關聯物件.應該如何查詢,可以通過配置對映檔案的屬性來設定。

lazy屬性:

解決查詢的時機的問題,是否延遲載入關聯資料,例如下面2條語句:

customer c1 =

(customer) session.

get(customer.

class,1

);system.out.

println

(c1.

getlinkmans()

.size()

);

lazy的預設屬性是true,即執行第一條語句的時候,不會執行sql語句去查詢其關聯的表的資料,它只會查詢當前表的資料,當執行到第二條語句的時候才會執行sql語句去查詢其關聯表的資料.

fetch屬性

用於解決查詢的語句用何種形式來執行,例如select 語句,join語句,子查詢語句等等.

lazy和fetch屬性可以配置在set標籤上, 可以在一對多的一方和多對多的任何一方的set標籤上進行設定.

下面介紹下這2個屬性的取值及其含義:

lazy的取值

控制是否延遲查詢關聯物件

true

預設值,延遲

false

不延遲extra

及其懶惰,只查詢關聯條件的內容,關聯物件的其他欄位不查詢,只有單獨用到這些欄位才會再次查詢

fetch的取值

控制sql語句生成的格式

select

預設值,傳送select查詢語句

join

連線查詢.傳送的是一條迫切左外連線,如果配置了join,那麼lazy屬性就失效了

subselect

子查詢.傳送一條子查詢查詢其關聯物件.(需要使用list()方法進行測試)

hibernate框架都採用了預設值,開發中基本上使用的都是預設值。特殊的情況按需求而定。

標籤上使用fetch和lazy屬性只會出現在一對多的多方對映檔案中。具體取值和含義如下:

lazy的取值

控制是否延遲查詢關聯物件

false

不延遲proxy

預設值,是否延遲是由另一端的上的lazy屬性確定.

說明:如果另一端的上的lazy=」true」,那麼proxy的值就是true(延遲載入);如果另一端的上lazy=」false」,那麼該proxy的值就是false(不採用延遲.)

fetch的取值

控制sql語句生成的格式

select

預設值,傳送select查詢語句

join

連線查詢.傳送的是一條迫切左外連線,如果配置了join,那麼lazy屬性就失效了

hibernate 查詢優化

1.延遲載入先獲取到 物件,當真正使用到該物件中的屬性的時候,才會傳送sql語句,是hibernate框架提公升效能的方式 2.類級別的延遲載入 session物件的load方法預設就是延遲載入 customer c session.load customer.class,1l 沒有傳送sql語句,...

Hibernate框架 查詢優化

一 類級別查詢 get方法 沒有任何策略,呼叫即立即查詢資料庫載入資料。load方法 應用類級別的載入策略 lazy 預設值 true,查詢類時,會返回 物件,會在使用屬性時,根據關聯的session查詢資料庫,載入資料 lazy false.load方法會與get方法沒有任何區別,呼叫時即載入資料...

Hibernate的查詢優化策略

2.抓取策略 3.批量抓取 延遲載入 也稱為懶載入 是hibernate關聯關係物件預設的載入方式,延遲載入機制是為了避免一些無謂的效能開銷而提出來的,所謂延遲載入就是當在真正需要資料的時候,才真正執行資料載入操作。通常將延遲載入分為兩類 一類叫做類級別延遲,另一類叫做關聯級別的延遲。類級別的延遲指...