上篇博客大致的介紹了Hibernate的一些基本概念,這篇博客在簡單的介紹幾個Hibernate的核心組件。分別簡單介紹一下:
- Configuration接口:裝載配置類,負責配置並啓動Hibernate,創建SessionFactory對象
Configuration用於配置並啓動Hibernate:動態配置Hibernate的屬性,創建相應SessionFactory實例。
//加載Hibernate的配置文件 Configuration config = new Configuration().configure("/hibernate/hibernate.cfg.xml"); //還可以加載映射文件 Configuration config = new Configuration().addFile("TRegister.hbm.xml");//方法一 Configuration config = new Configuration().addClass(hibernate.PO.TRegister.class);//方法二 Configuration config = new Configuration().addURL(Configuration.class.getResource("TRegister.hbm.xml"));//方法三
- SessionFactory接口:初始化Hibernate,創建Session對象
一個SessionFactory對應一個數據源,它是個重量級對象,不可隨意生成多個實例。對於一般的單數據庫應用來說,只需要一個SessionFactory就足夠了。當然如果有多個數據庫的話,還是需要爲每個數據庫生成對應的SessionFactory。它是線程安全的,同一個實例可以被應用中的多個線程共享。
代碼:
Configuration config = new Configuration().configure("/hibernate/hibernate.cfg.xml"); SessionFactory sessionFactory = config.buildSessionFactory();
- Session接口:負責操作數據庫,Session是非線程安全的
Hibernate應用中使用最廣泛的接口,是持久化管理器,提供添加、更新、刪除、加載、查詢對象。Session不是線程安全的,所以應避免多個線程共享同一個Session實例。Session是輕量級對象,它的創建和銷燬不需要太多資源,這意味着在應用中可以經常創建和銷燬Session對象。
Session有一個緩存,稱之爲Hibernate的一級緩存,它存放當前工作單元加載的持久化對象,每個Session都有自己的緩存,緩存中的對象只能被當前工作單元訪問。
- Transaction接口:負責事務相關的操作
Transaction是Hibernate的數據庫事務接口,它對底層的事務接口進行了封裝,底層事務接口包括:
JDBC API
JTA(Java Transaction API)
CORBA(Common Object RequetBroker Architecture) API
package com.bjpowernode.hibernate; import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class Client { public static void main(String[] args) { //讀取hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); //建立SessionFactory SessionFactory factory = cfg.buildSessionFactory(); //取得session Session session = null; try { session = factory.openSession(); //開啓事務 session.beginTransaction(); User user = new User(); user.setName("張三"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //保存User對象 session.save(user); //提交事務 session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); //回滾事務 session.getTransaction().rollback(); }finally { if (session != null) { if (session.isOpen()) { //關閉session session.close(); } } } } }
- Query和Criteria接口:執行數據庫查詢。
查詢接口,用於向數據庫查詢對象,以及控制執行查詢的過程。Query實例包裝了一個HQL(Hibernate QueryLanguage)來查詢。Criteria接口完全封裝了基於字符串形式的查詢語句,比Query更面向對象,Criteria更擅長執行動態查詢。
上面的幾個組件也可以用下面的圖展示一下:
結尾:要詳細的瞭解這幾個核心組件,我覺得還是應該到官網上去下載一下源碼,仔細研究。官網地址:點擊打開鏈接