Hibernate是一個開源的對象關係映射框架,對JDBC進行非常輕量級的封裝。它將POJO與數據表建立了映射關係,是一個全自動的ORM框架。
Hibernate可以自動生成SQL語句並且自動執行SQL,可以用面向對象思想來操縱數據庫。
在開始第一個hibernate小程序之前我們有必要熟悉一下hibernate的五大對象。
Configuration: Configuration 類負責管理 Hibernate 的配置信息
SessionFactory:
1)針對單個數據庫映射關係經過編譯後的內存鏡像,是線程安全的。
2)SessionFactory 對象一旦構造完畢,即被賦予特定的配置信息
3)SessionFactory是生成Session的工廠
4)構造 SessionFactory 很消耗資源,一般情況下一個應用中只初始化一個 SessionFactory 對象。
5)Hibernate4 新增了一個 ServiceRegistry 接口,所有基於 Hibernate 的配置或者服務都必須統一向這個 ServiceRegistry 註冊後才能生效
Session:
1)Session 是應用程序與數據庫之間交互操作的一個單線程對象,是 Hibernate 運作的中心,所有持久化對象必須在 session 的管理下纔可以進行持久化操作。此對象的生命週期很短。Session 對象有一個一級緩存,顯式執行 flush 之前,所有的持久層操作的數據都緩存在 session 對象處。相當於 JDBC 中的 Connection。
2)持久化類與 Session 關聯起來後就具有了持久化的能力。
Transaction:
允許應用程序定義工作單位,同時保持底層事務實現的抽象。
Criteria:
criteria是通過組合criteria對象檢索實體的一個簡化的接口,session是一個標準的工廠Criteria實例通常是通過工廠的方法來限制。
上面對hibernate和其常用對象做了一個簡單的介紹,下面就開始我們的第一個小程序吧。
一、hibernate開發環境準備
1、新建一個web工程,將…….\hibernate-release-4.2.4.Final\lib\required下面的所有jar包導入到web工程lib目錄下。
2、加入數據庫驅動包,我這裏用的數據庫是mysql驅動包是:
mysql-connector-java-5.1.7-bin.jar
二、開始編寫第一個hibernate程序
1、新建hibernate.cfg.xml文件並編寫其基本信息(主要是配置sessionFactory,相當於connection,起到鏈接數據庫的作用)
2、在mysql數據庫客戶端新建一個數據表
3、編寫一個實體類,該實體類屬性與數據表中的字段名或者別名相映射
4、新建實體類的數據庫映射文件XXXX.hbm.xml
5、將實體類的數據庫映射文件引入到hibernate配置文件中
6、新建一個測試類,如下
package com.wxf.hibernate.test;
import java.util.UUID;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.Test;
import com.wxf.hibernate.entity.Student;
public class HelloworldTest {
@Test
public void test() {
//1.創建一個SessiionFactory對象
SessionFactory sessionFactory=null;
//1).創建Configuration對象:對應hibernate的基本信息和對象關係映射信息
Configuration configuration=new Configuration().configure();
//2).創建一個ServiceRegistry對象:hibernate的任何配置和服務都需要在該對象中註冊後纔能有效
ServiceRegistry serviceRegistry=
new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
//3).基於以上幾個對象創建SessionFactory對象
sessionFactory=configuration.buildSessionFactory(serviceRegistry);
//2.創建一個Session對象
Session session=sessionFactory.openSession();
//3.開啓事務
Transaction transaction=session.beginTransaction();
//4.執行操作
Student student=new Student(UUID.randomUUID().toString(),"wangxiaofei",22,"male","13190241");
session.save(student);
//5.提交事務
transaction.commit();
//6.關閉Session對象
session.close();
//7.關閉SessionFactory對象
sessionFactory.close();
}
}
運行結果如下: