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:光盤\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:光盤\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());
}
}
}
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:光盤\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:光盤\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());
}
}
}