hibernate 延遲載入和抓取策略

2022-03-16 10:57:31 字數 1331 閱讀 1486

1.簡單查詢get,load 針對物件本身延遲或即時

當使用load方法來得到乙個物件時,此時hibernate會使用延遲載入的機制來載入這個物件,即:當我們使用session.load()方法來載入乙個物件時,此時並不會發出sql語句,當前得到的這個物件其實是乙個**物件,這個**物件只儲存了實體物件的id值,只有當我們要使用這個物件,得到其它屬性時,這個時候才會發出sql語句,從資料庫中去查詢我們的物件。

相對於load的延遲載入方式,get就直接的多,當我們使用session.get()方法來得到乙個物件時,不管我們使不使用這個物件,此時都會發出sql語句去從資料庫中查詢出來

2.相關物件的延遲或即時,通過配置中lazy="true/false/proxy"

在hibernate中可以通過一些採用延時載入策略封裝的方法實現延時載入的功能,我們不僅也可以用load()方法進行延時載入,還可以在對映檔案中的元素中的lazy屬性實現該功能。如下圖所示

注意:當使用get載入物件時,不一定就是立即查詢,要根據你查詢的內容和配置檔案中的資訊而定。(當然get載入語句中的物件.class一定是立即執行的,剛才所說的意思是,當通過外來鍵查詢其他表時,那麼那些查詢語句就不一定是立即執行)

例如:lazy:預設是true(延遲載入),當設定成false時,就會立即執行查詢的語句。

lazy還有乙個屬性值是proxy:(和select差不多,自動根據實際情況來,用誰查誰)

連 接抓取(join fetching)

連線抓取, 使用連線抓取可以將原本需要查詢兩次(或多次)表的多次查詢 整合到只需要一次查詢即可完成, 舉個例子, 當查詢多個表的時候需要傳送至少兩條 sql 語句, 而如果使用 join 查詢的話, 其會根據需要查詢的將 表與表連線起來進行查詢,僅僅一條 sql 語句就可以將需要的資料全部查詢回來;

查詢抓取(select fetching)

查詢抓取, 這種策略是在集合抓取的時候的預設策略, 即如果集合需要初始化, 那麼會重新發出一條 sql 語句進行查詢; 這是集合預設的抓取策略, 也就是我們常會出現n+1次查詢的查詢策略;

子查詢抓取(subselect fetching) 

子查詢抓取, 另外傳送一條select 語句抓取在前面查詢到(或者抓取到)的所有實體物件的關聯集合

Hibernate 延遲載入和立即載入

概念 什麼是延遲載入 所謂延遲載入就是當在真正需要資料的時候,才真正執行資料載入操作。可以簡單理解為,只有在使用的時候,才會發出sql語句進行查詢,資料是分n次讀取。一 延遲載入 nhibernate延遲載入須有session存在,且配置為lazy true 預設 dal中編寫方法如下 延遲載入 p...

Hibernate 延遲載入和立即載入

概念 什麼是延遲載入 所謂延遲載入就是當在真正需要資料的時候,才真正執行資料載入操作。可以簡單理解為,只有在使用的時候,才會發出sql語句進行查詢,資料是分n次讀取。一 延遲載入 nhibernate延遲載入須有session存在,且配置為lazy true 預設 dal中編寫方法如下 延遲載入 p...

Hibernate 延遲載入和立即載入

延遲載入 延遲載入 lazy load懶載入 是當在真正需要資料時,才執行sql語句進行查詢,避免了無謂的效能開銷。延遲載入分類 01.類級別的查詢策略 02.一對多和多對多關聯的查詢策略 03.多對一關聯的查詢策略 如果程式載入乙個物件的目的是為了訪問它的屬性,可採取立即檢索,如果程式載入乙個持久...