天天看點

SessionFactory

2.6 建構SessionFactory

Hibernate的SessionFactory接口提供Session類的執行個體,Session類用于完成對資料庫的操作。由于 SessionFactory執行個體是線程安全的(而Session執行個體不是線程安全的),是以每個操作都可以共用同一個SessionFactory來擷取Session。

Hibernate配置檔案分為兩種格式,一種是xml格式的配置檔案,另一種是Java屬性檔案格式的配置檔案,是以建構SessionFactory也有兩種方法,下面分别介紹。

2.6.1 從XML檔案讀取配置資訊建構 SessionFactory

從XML檔案讀取配置資訊建構SessionFactory的具體步驟如下。

(1)建立一個Configuration對象,并通過該對象的configura()方法加載Hibernate 配置檔案,代碼如下。

Configuration config = new Configuration().configure();

configura()方法:用于告訴Hibernate加載hibernate.cfg.xml檔案。 Configuration在執行個體化時預設加載classpath中的hibernate.cfg.xml,當然也可以加載名稱不是hibernate.cfg.xml的配置檔案,例如wghhibernate.cfg.xml,可以通過以下代碼實作。

Configuration config = new Configuration().configure("wghhibernate.cfg.xml");

(2)完成配置檔案和映射檔案的加載後,将得到一個包括所有Hibernate運作期參數的 Configuration執行個體,通過Configuration執行個體

的buildSessionFactory()方法可以建構一個惟一的SessionFactory,代碼如下。

SessionFactory sessionFactory = config.buildSessionFactory();

建構SessionFactory要放在靜态代碼塊中,因為它隻在該類被加載時執行一次。一個典型的建構 SessionFactory的代碼如下。

例程2-9:CD光牒\mr\02\sl\09\CoreSession.java

java 代碼

import org.hibernate.*;

import org.hibernate.cfg.*;

public class CoreSession {

static SessionFactory sessionFactory;

//注意到這裡的SessionFactory都是static的

//初始化Hibernate,建立 SessionFactory執行個體,隻在該類被加載到記憶體時執行一次

static{

try{

Configuration config = new Configuration().configure();

sessionFactory = config.buildSessionFactory();

} catch (Exception e) {

System.out.println(e.getMessage());

}

}

}

2.6.2 從Java屬性檔案讀取配置資訊建構SessionFactory

從Java屬性檔案讀取配置資訊建構SessionFactory的具體步驟如下。

(1)建立一個Configuration對象,此時Hibernate會預設加載classpath中的配置檔案hibernate.properties,代碼如下。

Configuration config = new Configuration();

(2)由于在配置檔案中缺少相應的配置映射檔案的資訊,是以此處需要通過編碼方式加載,這可以通過Configuration對象的

addClass()方法實作,具體代碼如下。

config.addClass(BranchForm.class);

addClass()方法用于加載實體類。

(3)完成配置檔案和映射檔案的加載後,将得到一個包括所有Hibernate運作期參數的Configuration執行個體,通過Configuration執行個體

的buildSessionFactory()方法可以建構一個惟一的SessionFactory,代碼如下。

SessionFactory sessionFactory = config.buildSessionFactory();

建構SessionFactory要放在靜态代碼塊中,因為它隻需在該類被加載時執行一次,一個典型的建構SessionFactory的代碼如下。

例程2-10:CD光牒\mr\02\sl\10 \CoreSession.java

java 代碼

import org.hibernate.*;

import org.hibernate.cfg.*;

public class CoreSession {

static SessionFactory sessionFactory;

//初始化Hibernate,建立 SessionFactory執行個體,隻在該類被加載到記憶體時執行一次

static{

try{

Configuration config = new Configuration();

config.addClass(BranchForm.class);

sessionFactory = config.buildSessionFactory();

} catch (Exception e) {

System.out.println(e.getMessage());

}

}

}

繼續閱讀