hibernate核心API介紹

1.1. 對象的三種狀態

臨時狀態(瞬時狀態):

指的是該對象不受session對象管理,沒有id值,剛剛被new創建出來的。

持久化狀態:

通過session對象的savesaveOrUpdate方法從臨時狀態變成持久化狀態。受session對象管理,有id值,持久化狀態的對象在修改對象的屬性的時候,會自動的把修改後的值同步到數據庫中,相當發出update的語句

遊離狀態(託管狀態)

通過session對象的closeclearevict方法把一個持久化狀態的對象轉換成遊離狀態的對象。

遊離狀態的對象不受session的管理,有id

刪除狀態(非官方)

 

1.2. Session詳解

Session對象在hibernate中的屬於一級緩存、會話級別的緩存、對象級別緩存,hibernate中不想用一級緩存,還不行,自帶的。

緩存:把數據保存到內存中

 Session屬於會話級別的緩存,如果不是同一個session對象,緩存的數據不能共用。

Get方法與load方法的區別(面試題)

1.Session中的get方法與load方法都可以把數據緩存到一級緩存

2.Get方法執行後會立即發出sql語句(立即加載),load方法不會立即發出sql語句,在調用對象中的非本地方法的時候會發出sql語句(懶加載)

3.load方法得到的對象是一個代理對象,get方法得到的對象是po類型的真實類型的對象

4.Get方法查詢數據的時候,沒有該數據,返回null,如果laod方法查詢數據的時候,沒有該數據,直接報錯

 evictObj)方法:清除一級緩存中指定的緩存對象

 Clear方法:可以清楚一級緩存中的所有緩存對象

Update方法:更新對象,更新的對象沒有id會報錯,或者id在數據庫中沒有該記錄,也會報錯

1.3. SessionFactory介紹

l Hibernate中有一級緩存、二級緩存,一級緩存Session對象,二級緩存就是指的是SessionFactory對象,只不過hibernate沒有提供二級緩存的實現類(第三方的緩存實現類來實現),提供了接口。

l SessionFactory是一個重量級的對象(在創建該對象的時候消耗資源比較大),所以hibernate中的SessionFactroy對象建議在應用中只有一份,它是一個線程安全的對象,此對象就可以作爲成員變量使用。Session對象是一個線程安全的嗎?(不安全)

l SessionFactory對象是創建Session對象的工廠,提供了兩種方式得到Session。一種是openSession()、一種是getcurrentSession().

l openSessiongetcurrentSession區別(面試題)

openSession每次調用都會產生一個新的Session對象

 

要使用getcurrentSession方法需要在hibernate.cfg.xml配置文件中配置

<property name="hibernate.current_session_context_class">thread</property>

 

getcurrentSession每次調用先會去線程中拿,沒有才創建一個新的session對象

兩種方式獲得session建議使用哪個方法?

在實際開發中使用getcurrentSession

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章