Configuration類:
Configuration對象用於配置和啓動Hibernate。Hibernate應用通過Configuration實例來指定對象-關係映射文件的位置或者動態配置Hibernate的屬性,然後創建SessionFactory實例。
SessionFactory接口:
一個SessionFactory實例對應一個數據存儲源。應用從SessionFactory中獲取Session實例。
所以這裏SessionFactory我們可以使用單例!
// single
private static final SessionFactory sessionFactory;
static{
try{
//讀取映射的配置文件
sessionFactory=new Configuration().configure().buildSessionFactory();
}catch (Throwable e) {
// TODO: handle exception
throw new ExceptionInInitializerError(e);
}
}
// static method to get session
public static Session getSession() throws HibernateException{
return sessionFactory.openSession();
}
// close session factory
public static void closeSessionFactory(){
sessionFactory.close();
}
1)它是線程安全的,這意味着它的一個實例能夠被應用的多個線程共享。
2)它是重量級的,這意味着不能隨意創建或者銷燬,一個數據庫只對應一個SessionFactory。
通常構建SessionFactory是在某對象Bean的靜態初始化代碼塊中進行。
如果應用只是訪問一個數據庫,只需創建一個SessionFactory實例,並且在應用初始化的時候創建該實例。
如果應用有同時訪問多個數據庫,則需爲每個數據庫創建一個單獨的SessionFactory。
Session接口:
是Hibernate應用最廣泛的接口。它提供了和持久化相關的操作,如添加,刪除,更改,加載和查詢對象。
1)它是線程不安全的,因此在設計軟件架構時,應儘量避免多個線程共享一個Session實例。
2)Session實例是輕量級的,這意味着在程序可以經常創建和銷燬Session對象,
例如爲每個客戶請求分配單獨的Session實例。
原則:一個線程一個Session;一個事務一個Session。
Transaction接口:
是Hibernate的事務處理接口,它對底層的事務接口進行封裝。
Query和Criteria接口:
這兩個是Hibernate的查詢接口,用於向數據庫查詢對象,以及控制執行查詢的過程。
Query實例包裝了一個HQL查詢語句。
Criteria接口完全封裝了基於字符串形式的查詢語句,比Query接口更面向對象。Criteria更擅長於執行動態查詢。
補充:find方法也提供數據查詢功能,但只是執行一些簡單的HQL查詢語句的快捷方式(已過時),遠沒有Query接口強大!