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());
}
}
}