Hibernate——核心組件(二)

上篇博客大致的介紹了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更擅長執行動態查詢。

 

上面的幾個組件也可以用下面的圖展示一下:


 

結尾:要詳細的瞭解這幾個核心組件,我覺得還是應該到官網上去下載一下源碼,仔細研究。官網地址:點擊打開鏈接

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章