1. 程式人生 > >三、Hibernate常用介面和類

三、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的操作,都相當於一個獨立的事務