配置文件


Hibernate可以使用XML檔案或properties檔案來配置SessionFactory,預設的配置文件名稱為 hibernate.cfg.xml或hibernate.properties,使用下面的方式來讀入文件以配置Hibernate:
Configuration config = new Configuration().configure();

當您使用new建構Configuration物件時,會讀取Classpath路徑下的 hibernate.properties,如果您呼叫Configuration的configure()方法沒有指定路徑與檔案名稱時,則會再讀取 Classpath路徑下的hibernate.cfg.xml,如果有與hibernate.properties相同的屬性設定,則 hibernate.cfg.xml中的設定會覆蓋hibernate.properties中的設定。

前幾個主題中所示範的為使用XML文件的方式,一個XML文件的例子如下:
  • hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>
<!-- 顯示實際操作資料庫時的SQL -->
<property name="show_sql">true</property>
<!-- 將顯示的SQL排版,方便觀看 -->
<property name="format_sql">true</property>
<!-- SQL方言,這邊設定的是MySQL -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- JDBC驅動程式 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- JDBC URL -->
<property name="connection.url">jdbc:mysql://localhost/demo</property>
<!-- 資料庫使用者 -->
<property name="connection.username">caterpillar</property>
<!-- 資料庫密碼 -->
<property name="connection.password">123456</property>

<!-- 物件與資料庫表格映射文件 -->
<mapping resource="onlyfun/caterpillar/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

預設的XML配置文件名稱是hibernate.cfg.xml,您也可以自行指定檔案路徑與名稱,例如:
Configuration config = new Configuration().configure("/config/db.cfg.xml");

在取得Configuration實例後,您還可以撰寫程式的方式來設定新的屬性,或甚至讀入另一個HBM設定檔案,例如:
Configuration config = new Configuration
                              .configure()
                              .setProperty(Environment.FORMAT_SQL, "true")
                              .addResource("onlyfun/caterpillar/Room.hbm.xml");

所有的屬性設定,在Hibernate中都對應於Environment類別中的一個靜態成員,例如format_sql就對 應於Enviromnent.FORMAT_SQL,connection.driver_class就對應於Environment.DRIVER。

為了配置文件時更有彈性,您可以使用系統屬性來指定,例如在hibernate.cfg.xml中撰寫:
...
    <property name="show_sql">\${displaysql}</property>
    <!-- 將顯示的SQL排版,方便觀看 -->
...

如此,若在啟動Java時,加上-Ddisplaysql=true,則可觀看到產生的SQL語句。

使用屬性檔案進行配置時,檔案名稱是hibernate.properties,必須放置在Classpath之下,一個例子如下:
  • hibernate.properties
hibernate.show_sql = true
hibernate.format_sql = true
hibernate.dialect = org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost/demo
hibernate.connection.username = caterpillar
hibernate.connection.password = 123456

由於properties檔案中不包括映射文件的名稱,為了要取得物件至資 料庫表格的映射文件,您必須在程式中如下載入:
Configuration cfg = new Configuration()
    .addClass(onlyfun.caterpillar.User.class)
    .addClass(onlyfun.caterpillar.Room.class);

第一個addClass()加入位於Classpath根目錄下的User.hbm.xml,第二個addClass()加入Room類別的映射文件,該 文件必須位於與User類別同一個目錄,也就是onlyfun/caterpillar/Room.hbm.xml。

在Hibernate下載檔案中的etc目錄下,有hibernate.cfg.xml與hibernate.properties可供設定參考。

Configuration的實例管理Hibernate的配置訊息,通常用於建立SessionFactory,例如:
SessionFactory sessionFactory = config.buildSessionFactory();

SessionFactory一旦建立,就被賦予當時Configuration的配置訊息,之後您改變Configuration並不會影響已建立的 SessionFactory實例,如果對Configuration改動後,則要建立一個新的SessionFactory實例,新的實例中會包括新的 配置訊息, SessionFactory是被設計為「執行緒安全的」(Thread-safe)。