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.多對一關聯的查詢策略 如果程式載入乙個物件的目的是為了訪問它的屬性,可採取立即檢索,如果程式載入乙個持久...