三、Hibernate常用介面和類
Configuration類和作用
Configuration物件用於配置並且啟動Hibernate。
Hibernate應用通過該物件來獲得物件-關係對映檔案中的元資料,以及動態配置Hibernate的屬性,然後建立SessionFactory物件。
簡單一句話:載入Hibernate的配置檔案,可以獲取SessionFactory物件。
載入配置檔案的種類,Hibernate支援xml和properties型別的配置檔案,在開發中基本都使用XML配置檔案的方式。
如果採用的是properties的配置檔案,那麼通過Configuration configuration = new Configuration();
config.addResource("cn/itcast/domain/Student.hbm.xml");
如果採用的XML的配置檔案,通過Configuration configuration = new Configuration().configure();
即可載入配置檔案
SessionFactory
是工廠類,是生成Session物件的工廠類
SessionFactory類的特點:
-
由Configuration通過載入配置檔案建立該物件。
-
SessionFactory物件中儲存了當前的資料庫配置資訊和所有對映關係以及預定義的SQL語句。同時,SessionFactory還負責維護Hibernate的二級快取。
-
預定義SQL語句
- 使用Configuration類建立了SessionFactory物件是,已經在SessionFacotry物件中快取了一些SQL語句
- 常見的SQL語句是增刪改查(通過主鍵來查詢)
- 這樣做的目的是效率更高
-
一個SessionFactory例項對應一個數據庫,應用從該物件中獲得Session例項。
-
SessionFactory是執行緒安全的,意味著它的一個例項可以被應用的多個執行緒共享。
-
SessionFactory是重量級的,意味著不能隨意建立或銷燬它的例項。如果只訪問一個數據庫,只需要建立一個SessionFactory例項,且在應用初始化的時候完成。
-
SessionFactory需要一個較大的快取,用來存放預定義的SQL語句及實體的對映資訊。另外可以配置一個快取外掛,這個外掛被稱之為Hibernate的二級快取,被多執行緒所共享.
-
一般應用使用一個SessionFactory,最好是應用啟動時就完成初始化。
單獨使用hibernate的時候,為了保證SessionFactory僅初始化一次,通常會整一個工具類來管理,例如:
package blog.csdn.net.mchenys.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* Hibernate框架的工具類
* @author mChenys
*
*/
public class HibernateUtils {
private static final SessionFactory FACTORY;
private static final Configuration CONFIG;
//保證僅初始化一次
static {
// 載入XML的配置檔案
CONFIG = new Configuration().configure();
// 構造工廠
FACTORY = CONFIG.buildSessionFactory();
}
/**
* 從工廠中獲取Session物件
* @return
*/
public static Session getSession() {
return FACTORY.openSession();
}
}
Session介面
概述
- Session是在Hibernate中使用最頻繁的介面。也被稱之為持久化管理器。它提供了和持久化有關的操作,比如新增、修改、刪除、載入和查詢實體物件
- Session 是應用程式與資料庫之間互動操作的一個單執行緒物件,是 Hibernate 運作的中心
- Session是執行緒不安全的
- 所有持久化物件必須在 session 的管理下才可以進行持久化操作
- Session 物件有一個一級快取,顯式執行 flush 之前,所有的持久化操作的資料都快取在 session 物件處
- 持久化類與 Session 關聯起來後就具有了持久化的能力
特點
- 不是執行緒安全的。應避免多個執行緒使用同一個Session例項
- Session是輕量級的,它的建立和銷燬不會消耗太多的資源。應為每次客戶請求分配獨立的Session例項,使用完後通常會呼叫close方法釋放資源。
- Session有一個快取,被稱之為Hibernate的一級快取。每個Session例項都有自己的快取
常用的方法
- save(obj) --插入一條資料
- delete(obj) --刪除一條資料
- get(Class,id) --查詢一條資料,根據id查詢
- update(obj) --更新一條資料
- saveOrUpdate(obj) – 儲存或者修改(如果沒有資料,儲存資料。如果有,修改資料)
- createQuery() – HQL語句的查詢的方式
凡是更新資料的操作都建議先通過查詢獲取到物件後再來修改,而不是直接new一個物件來操作
幾個操作一級快取的方法
- clear():清空所有一級快取
- evict(Object entity):從一級快取中清除指定的實體物件。
- flush(): 刷出快取,這一步會對照快取和快照,如果不一致會直接操作資料庫
Transaction介面
Transaction是事務的介面,常用的方法有2個:
- commit() – 提交事務
- rollback() – 回滾事務
特點
- Hibernate框架預設情況下事務不自動提交.需要手動提交事務
- 如果沒有開啟事務,那麼每個Session的操作,都相當於一個獨立的事務