Hibernate核心接口
Hibernate有五大核心接口,分別是:Session Transaction Query SessionFactoryConfiguration 。這五個接口構成了Hibernate運行的基本要素,可以執行存取,持久化,事務管理等操作。這五個接口可以位於系統的業務邏輯層和持久化層。下面是一張Hibernate的關系圖:
Session接口:
Session接口 Session 接口對於Hibernate 開發人員來說是一個最重要的接口。然而在Hibernate中,實例化的Session是一個輕量級的類,創建和銷毀它都不會占用很多資源。這在實際項目中確實很重要,因為在客戶程序中,可能會不斷地創建以及銷毀Session對象,如果Session 的開銷太大,會給系統帶來不良影響。但是Session對象是非線程安全的,因此在你的設計中,最好是一個線程只創建一個Session對象。 session可以看作介於數據連接與事務管理一種中間接口。我們可以將session想象成一個持久對象的緩沖區,Hibernate能檢測到這些持久對象的改變,並及時刷新數據庫。我們有時也稱Session是一個持久層管理器,因為它包含這一些持久層相關的操作, 諸如存儲持久對象至數據庫,以及從數據庫從獲得它們。需要注意的是,Hibernate的session不同於JSP 應用中的HttpSession。當我們使用session這個術語時,我們指的Hibernate 中的session,而我們以后會將HttpSesion 對象稱為用戶session。
SessionFactory接口:
SessionFactroy接口負責初始化Hibernate。它充當數據存儲源的代理,並負責創建Session對象。這里用到了工廠模式。需要注意的是SessionFactory並不是輕量級的,因為一般情況下,一個項目通常只需要一個SessionFactory就夠,當需要操作多個數據庫時,可以為每個數據庫指定一個SessionFactory。
Transaction接口
Transaction接口負責事務相關的操作,一般在Hibernate的增刪改中出現,但是使用Hibernate的人一般使用Spring去管理事務。
Query接口
Query負責執行各種數據庫查詢。它可以使用HQL語言或SQL語句兩種表達方式。它的返回值一般是List。需要自己轉換。
Configuration接口:
Configuration對象用於配置並根啟動Hibernate。Hibernate應用通過Configuration實例來指定對象—關系映射文件的位置或者動態配置Hibernate的屬性,然后創建SessionFactory實例。我們可以查看Configuration的源代碼,它的configure()方法是這樣實現的:
- public Configuration configure() throwsHibernateException {
- configure("/hibernate.cfg.xml" );//此處指定了ORM文件的位置
- return this;
- }
我們看到它是在這里指定了ORM文件的位置,這就是為什么Hibernate總是默認到classpath下去尋找hibernate.cfg.xml文件的原因了。實際上我們還可以通過configure(String resource)來動態的指定配置文件,只不過通常我們都是采用的默認設置罷了。這樣的話我們的配置文件就都被讀取了,同時配置文件中通過<mapping>元素引入的映射文件也被讀取了。
Hibernate運行過程:
1.通過Configuration().configure();讀取並解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>讀取並解析映射信息
3.通過config.buildSessionFactory();//創建SessionFactory
4.sessionFactory.openSession();//打開Sesssion
5.session.beginTransaction();//創建事務Transation
6.persistent operate持久化操作 //一般指Save這個方法
7.session.getTransaction().commit();//提交事務
8.關閉Session
9.關閉SesstionFactory