最近在用hibernate的時候發現乙個問題:比如我們從資料庫獲得乙個物件時,使用session.get()方法還是session.load()? 兩種方法在獲得乙個實體物件時是有區別的,在查詢效能上兩者是不同的。
一.獲得實體物件的不同
// load方法load方法是懶載入,,即:當我們使用session.load()方法來載入乙個物件時,此時並不會發出sql語句,當前得到的這個物件其實是乙個**物件,這個**物件只儲存了實體物件的id值,只有當我們要使用這個物件,得到其它屬性時,這個時候才會發出sql語句,從資料庫中去查詢我們的物件。public
student getstudentbystudo(string studo)
catch
(hibernateexception e)
finally
}
這就造成在實際的執行中,如果想要獲得id之外的值會報錯.
1.可以獲得id
2.獲取這個物件的其他值會報錯
這裡的原因在上面已經說了,session.load()不會發出sql語句,且只會得到物件的乙個id值.
相比之下session.get()方法就比較直接,當我們使用session.get()方法來得到乙個物件時,不管我們使不使用這個物件,此時都會發出sql語句去從資料庫中查詢出來.
所以二者比較:session.load():①效能好不會發出sql語句,但是如果查id之外的值會報錯.②報錯可控 不會出現null
session.get():①不管你用不用這個物件都會發出sql語句,所以效能差,但是可以查物件的所有值. ②報錯不可控 查不到物件的話 會報null.
最後建議:使用createsqlquery介面,一般的業務邏輯都可以滿足. 完美!
hibernate的get和load方法的區別
訪問資料庫時機 name com.pojo.customer table cst customer lazy false public class customerdaotest 需求 通過id查詢指定的客戶資訊,有延遲 test public void load hibernate內建的連線池功能...
Hibernate的get和load方法
load和get一共是2個區別 第乙個 延遲載入 load是true而get是false 意 思就是 load採用的是延遲載入的方式 而get不是,hibernate思想是 既然這個方法支援延遲載入 他就認為這個物件一定在資料庫存在,在你 宣告 tfaq tfag2 tfaq sess.load t...
Hibernate的load和get方法的區別
這次我們聊一下hibernate3.2session載入資料時get和load方法的區別,我總結的如下 1.對於get方法,hibernate會確認一下該id對應的資料是否存在,首先在session快取中查詢,然後在二級快取中查詢,還沒有就查詢資料庫資料庫中沒有就返回null。這個相對比較簡單,也沒...