Hibernate是對jdbc的封裝,大大簡化了數據訪問層繁瑣的重複性代碼。sql
Hibernate是一個優秀的ORM實現,很大程度上簡化了DAO的編碼功能。數據庫
Hibernate能夠很方便的進行數據的移植工做。api
Hibernate提供了緩存機制,是程序執行更改的高效。緩存
ORM(Object Relation Mapping)對象關係映射,是把數據庫中的關係數據映射成爲程序中的對象。session
使用ORM的優勢:提升了開發效率下降了開發成本、開發更簡單更對象化、可移植性強。app
在Config裏面把Hibernate.show_sql設置爲true就能夠。可是不建議開啓,由於開啓以後會下降程序的運行效率。框架
三種:ide
能夠定義爲final類,可是這樣的話就不能使用Hibernate代理模式下的延遲關聯來提升性能了,因此不建議定義實體類爲final。函數
Integer類型是對象,它的值容許爲null,而int屬於基礎數據類型,值不能爲null。性能
讀取並解析配置文件。
讀取並解析映射文件,建立SessionFactory。
打開Session。
建立事務。
進行持久化操做。
提交事務。
關閉Session。
關閉SeesionFactory。
數據查詢時,沒有OID指定的對象,get方法返回null,load方法返回一個代理對象。
load方法支持延遲加載,get方法不支持延遲加載。
Hibernate經常使用的緩存有一級緩存和二級環境。
一級緩存:也叫session緩存,只在session做用範圍內有效,不須要用戶干涉,有Hibernate自身維護,能夠經過evict方法清除object的緩存,clear方法清除一級緩存中的全部緩存,flush刷新緩存。
二級緩存:應用級別的緩存,在全部session中都有效,支持配置第三方的緩存,如EhCache。
臨時/瞬時狀態:直接new出來的對象,該對象尚未被持久化(沒保存在數據庫中),不受Session管理。
持久化狀態:當調用session的Save、saveOrUpdate、get、load、list等方法的時候,對象就是持久化狀態。
遊離狀態:Session關閉以後對象就是遊離狀態。
getCurrentSession會綁定當前線程,而openSession則不會。
getCurrentSession事務是Spring控制,而且不須要手動關閉,而openSession須要手動開啓和提交事務。
Hibernate中每一個實體類必須提供一個無參構造函數,由於Hibernate框架要使用reflection api,經過調用Classnewlnstance()來建立實體類的實例,若是沒有無參的構造函數就會拋出異常。