1.Configuration:
負責管理Hibernate的配置信息,這些配置信息都是從配置文件hibernate.cfg.xml或者Hibernate.properties讀取的,當然也可以自定義文件名稱,只要在實例化Configuration的時候指定具體的路徑就可以了;
2.SessionFactiory:
Configuration的實例會根據當前的配置信息,構造SessionFactory實例。SessionFactory是線程安全的,一般情況下一個應用中一個數據庫共享一個SessionFactory實例。
2.1.構建SessionFactory
Hibernate的SessionFactory接口提供Session類的實例,Session類用於完成對數據庫的操作。由於SessionFactory實例是線程安全的(而Session實例不是線程安全的),所以每個操作都可以共用同一個SessionFactory來獲取Session。
Hibernate配置文件分為兩種格式,一種是xml格式的配置文件,另一種是Java屬性文件格式的配置文件,因此構建SessionFactory也有兩種方法,下面分別介紹。
2.6.1 從XML文件讀取配置信息構建SessionFactory
從XML文件讀取配置信息構建SessionFactory的具體步驟如下。
(1)創建一個Configuration對象,並通過該對象的configura()方法加載Hibernate配置文件,代碼如下。
Configuration config = new Configuration().configure();
configura()方法:用於告訴Hibernate加載hibernate.cfg.xml文件。Configuration在實例化時默認加載classpath中的hibernate.cfg.xml,當然也可以加載名稱不是hibernate.cfg.xml的配置文件,例如wghhibernate.cfg.xml,可以通過以下代碼實現。
Configuration config = new Configuration().configure("wghhibernate.cfg.xml");
(2)完成配置文件和映射文件的加載后,將得到一個包括所有Hibernate運行期參數的Configuration實例,通過Configuration實例的buildSessionFactory()方法可以構建一個惟一的SessionFactory,代碼如下。
SessionFactory sessionFactory = config.buildSessionFactory();
構建SessionFactory要放在靜態代碼塊中,因為它只在該類被加載時執行一次。一個典型的構建SessionFactory的代碼如下。

import org.hibernate.*; import org.hibernate.cfg.*; public class CoreSession { static SessionFactory sessionFactory; //注意到這里的SessionFactory都是static的 //初始化Hibernate,創建SessionFactory實例,只在該類被加載到內存時執行一次 static{ try{ Configuration config = new Configuration().configure(); sessionFactory = config.buildSessionFactory(); } catch (Exception e) { System.out.println(e.getMessage()); } } }
2.6.2 從Java屬性文件讀取配置信息構建SessionFactory
從Java屬性文件讀取配置信息構建SessionFactory的具體步驟如下。
(1)創建一個Configuration對象,此時Hibernate會默認加載classpath中的配置文件hibernate.properties,代碼如下。
Configuration config = new Configuration();
(2)由於在配置文件中缺少相應的配置映射文件的信息,所以此處需要通過編碼方式加載,這可以通過Configuration對象的addClass()方法實現,具體代碼如下。
config.addClass(BranchForm.class);
addClass()方法用於加載實體類。
(3)完成配置文件和映射文件的加載后,將得到一個包括所有Hibernate運行期參數的Configuration實例,通過Configuration實例的buildSessionFactory()方法可以構建一個惟一的SessionFactory,代碼如下。
SessionFactory sessionFactory = config.buildSessionFactory();
構建SessionFactory要放在靜態代碼塊中,因為它只需在該類被加載時執行一次,一個典型的構建SessionFactory的代碼如下。

import org.hibernate.*; import org.hibernate.cfg.*; public class CoreSession { static SessionFactory sessionFactory; //初始化Hibernate,創建SessionFactory實例,只在該類被加載到內存時執行一次 static{ try{ Configuration config = new Configuration(); config.addClass(BranchForm.class); sessionFactory = config.buildSessionFactory(); } catch (Exception e) { System.out.println(e.getMessage()); } } }
3.Session:
一般的持久化方法(CRUD)都是通過Session來調用的,Session是非線程安全的。Session的創建與關閉 :Session是一個輕量級對象,通常將每個Session實例和一個數據庫事務綁定,也就是每執行一個數據庫事務,都應該先創建一個新的Session實例,在使用Session后,還需要關閉Session。
3.1Session的創建
創建SessionFactory后,就可以通過SessionFactory創建Session實例,通過SessionFactory創建Session實例的代碼如下。
Session session=sessionFactory.openSession();
創建Session后,就可以通過創建的Session進行持久化操作了。
3.2Session的關閉
在創建Session實例后,不論是否執行事務,最后都需要關閉Session實例,釋放Session實例占用的資源。關閉Session實例的代碼如下:
session.close();