Hibernate的get和load方法

2021-08-26 04:03:25 字數 1143 閱讀 2469

load和get一共是2個區別

第乙個 延遲載入

load是true而get是false

意 思就是 load採用的是延遲載入的方式 而get不是,hibernate思想是 既然這個方法支援延遲載入 他就認為這個物件一定在資料庫存在,在你 宣告 tfaq tfag2=(tfaq)sess.load(tfaq.class, 300); 這句時候,hibernate就幹了一件事

1.查詢session快取

2.快取中沒有這個物件 就建立個**

因為延遲載入需要**來執行 所以就建立了個**

ok 到此為止 這句話就幹了個這個 並沒有去資料庫互動查詢

當你使用這個物件 比如tfag2.gettfrtitle()或get方法時候

這個時候 hibernate就去查詢二級快取和資料庫,資料庫沒有這條資料 就丟擲異常

整個load方法呼叫結束 load沒什麼神奇 這就是他幹過所有的事情

load方法講完了 我在講一下get方法工作原理

因為hibernate規定get方法不能使用延遲載入 所以和load還是不一樣的

tfaq tfag2=(tfaq)sess.get(tfaq.class, 300);

在建立這條語句時候 我們看看hibernate幹了哪些事

1.get方法首先查詢session快取 (session快取就是hibernate的一級快取 這個概念大家應該清楚吧 )

2.get方法如果在session快取中找到了該id對應的物件,如果剛好該物件前面是被**過的,如被load方法使用過,或者被其他關聯物件延遲載入過,那麼返回的還是原先的**物件,而不是實體類物件。

3.如果該**物件還沒有載入實體資料(就是id以外的其他屬性資料),那麼它會查詢二級快取或者資料庫來載入資料,但是返回的還是**物件,只不過已經載入了實體資料。

(這個**實際就是空的物件 並沒有去資料庫查詢得到的 我們叫**物件,如果 去資料庫查詢了 返回到了這個物件 我們叫實體物件 就是這個物件真實存在)

我在總結性一句話這2者區別

get方法首先查詢session快取,沒有的話查詢二級快取,最後查詢資料庫;反而load方法建立時首先查詢session快取,沒有就建立**,實際使用資料時才查詢二級快取和資料庫

*做刪除和關聯的時候一般用lode,做修改的時候用get方法

hibernate的get和load方法的區別

訪問資料庫時機 name com.pojo.customer table cst customer lazy false public class customerdaotest 需求 通過id查詢指定的客戶資訊,有延遲 test public void load hibernate內建的連線池功能...

Hibernate的load 和get 區別

最近在用hibernate的時候發現乙個問題 比如我們從資料庫獲得乙個物件時,使用session.get 方法還是session.load 兩種方法在獲得乙個實體物件時是有區別的,在查詢效能上兩者是不同的。一.獲得實體物件的不同 load方法 public student getstudentbys...

Hibernate的load和get方法的區別

這次我們聊一下hibernate3.2session載入資料時get和load方法的區別,我總結的如下 1.對於get方法,hibernate會確認一下該id對應的資料是否存在,首先在session快取中查詢,然後在二級快取中查詢,還沒有就查詢資料庫資料庫中沒有就返回null。這個相對比較簡單,也沒...