Hibernate配置文件詳解


Hibernate配置方式

Hibernate給人的感受是靈活的,要達到同一個目的,我們可以使用幾種不同的辦法。就拿Hibernate配置來說,常用的有如下三種方式,任選其一。

  1. 在 hibernate.cfg.xml 中加入元素 <property>、<mapping>,放置在類路徑(classpath)的根目錄下。
  2. 將 hibernate.properties 放置放在類路徑的根目錄下。
  3. 可編程的配置方式,即在程序中配置Hibernate的啟動參數、加載映射文件,需要用Configuration接口來實現這一方式。

使用hibernate.cfg.xml是我比較喜歡的方式,一方面xml天生的優勢——良好的可讀性,讓配置的意圖一目了然。另一方面這是官方推薦使用的,如果同時在hibernate.cfg.xml和hibernate.properties對Hibernate進行了配置,那么前者將覆蓋后者。

hibernate.properties可以非常的簡潔明了,並且有一種linux配置文件的風格。以#開始一行的注釋,用鍵值對的方式存儲配置參數。

對於這兩種方式,結果都是一樣的。只是看個人喜好。關於配置參數我們稍后討論。

Configuration類

org.hibernate.cfg.Configuration實例的作用是對Hibernate進行配置,以及對它進行啟動。在Hibernate的啟動過程中,Configuration類的實例首先讀取Hibernate配置文件,加載配置信息,然后加載映射文件,創建一個SessionFactory對象。

實例被設計成啟動期間(startup-time)對象,一旦SessionFactory 創建完成它就被丟棄了。

要使用一個Configuration對象,要為它設置兩個方面的內容:

  • 數據庫連接屬性
  • hbm.xml或pojo類

Configuration常用操作函數

1.加載Hibernate配置文件

Configuration cfg=new Configuration().configure("/etc/hibernate.cfg.xml");

或者

Configuration cfg=new Configuration().configure("/etc/hibernate.properties");

2.為Configuration指定映射文件

cfg.addResource("test/User.hbm.xml");

3.為Configuration指定POJO類,Order.hbm.xml根Order.java一個目錄

cfg.addClass(test.Order.class);

4.為Configuration指定Hibernate配置屬性,當然我們加載了配置文件就不能使用這個方法了

Configuration cfg = new Configuration()
    .addClass(test.User.class)
    .setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect")
    .setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test")
    .setProperty("hibernate.order_updates", "true");

5.獲得SessionFactory

SessionFactory sessions = cfg.buildSessionFactory();

當所有映射定義被 Configuration 解析后,應用程序必須獲得一個用於構造org.hibernate.Session 實例的工廠SessionFactory。這個工廠將被應用程序的所有線程共享,線程安全的全局對象,只需要被實例化一次。單例模式。

Hibernate 允許你的應用程序創建多個SessionFactory 實例。這對 使用多個數據庫的應用來說很有用。

hibernate.cfg.xml

hibernate.cfg.xml在文檔開頭的DTD(文檔類型定義)是很復雜的。我們並不需要去理會和記憶他。你可以直接copy它。

hibernate.cfg.xml文檔以<hibernate-configuration>為根元素,你可以在其子元素<session-factory>中

  • 加入<property>元素來配置各種參數。
  • 加入<mapping>加載映射文件,resource代表映射文件的路徑。

一個hibernate.cfg.xml例子:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- Database connection settings -->
        <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="connection.username">root</property>
        <property name="connection.password">klguang@mysql</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">10</property>
        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>
        <!-- Disable the second-level cache -->
        <property name="cache.provider_class">
            org.hibernate.cache.NoCacheProvider
        </property>
        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>
        <property name="javax.persistence.validation.mode">none</property>
        <mapping resource="hbm/User.hbm.xml" />
        <mapping resource="hbm/Event.hbm.xml" />
        <mapping resource="hbm/Person.hbm.xml" />
    </session-factory>
</hibernate-configuration>

hibernate.properties

對於hibernate.properties作為配置文件的方式,我是不推薦新手使用的。因為,其可讀性差,另外眾多的配置參數會讓初學者不知道如何下手。

在Hibernate發布包的project/etc/,提供了一個hibernate.properties文件,該文件列出了Hibernate 的所有配置參數,但都是用#注釋掉了。每一行是一個配置參數,以鍵值對的方式存在,空格前是key,空格后是value,我們應該將空格改為等號。

對每一個配置參數,文件里都有詳細的解釋。我們只需要將見面#去掉,並修改其value就可以了。

一個hibernate.properties例子:

#數據庫使用的驅動類
hibernate.connection.driver_class=com.mysql.jdbc.Driver
#數據庫連接串
hibernate.connection.url=jdbc:mysql://localhost:3306/db
#數據庫連接的用戶名
hibernate.connection.username=user
#數據庫連接的密碼
hibernate.connection.password=password
#數據庫使用的方言
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
#是否打印SQL語句
hibernate.show_sql=true
javax.persistence.validation.mode=none

hibernate.properties沒有提供加載映射文件的方式。因此需要通過Configuration的.addResource()方法來加載映射文件或POJO類,Hibernate會自動找到另一方,前提映射文件和POJO類在同一包(目錄)中。

Configuration cfg = new Configuration();
cfg.configure("/etc/hibernate.properties");
cfg.addResource("test/User.hbm.xml");
cfg.addClass(test.Order.class);

Hibernate配置參數詳解

Hibernate JDBC 屬性

屬性名

用途

hibernate.connection.driver_class

JDBC driver class

hibernate.connection.url

JDBC URL

hibernate.connection.username

database user

hibernate.connection.password

 數據庫用戶密碼

hibernate.connection.pool_size

maximum number of pooled connections

Hibernate 數據源屬性

屬性名

用途

hibernate.connection.datasource

數據源 JNDI 名字

hibernate.jndi.url JNDI

提供者的 URL(可選)

hibernate.jndi.class JNDI

InitialContextFactory 類(可選)

hibernate.connection.username

 數據庫用戶(可選)

hibernate.connection.password

數據庫密碼(可選)

可選的配置屬性

有大量屬性能用來控制 Hibernate 在運行期的行為。它們都是可選的,並擁有適當的默認值。

屬性名

用途

可選值

()內為默認

hibernate.dialect

允許 Hibernate 針對特定的關系數據庫生成優化的 SQL org.hibernate.dialect.Dialect 類名。

例如:org.hibernate.dialect.MySQLDialect

 

hibernate.show_sql

輸出所有 SQL 語句到控制台。

true|false

false

hibernate.format_sql

log console 中打印出更漂亮的 SQL

true|false

false

hibernate.default_catalog

 在生成的 SQL 中,將給定的 catalog 附加於非全限定名的表名上

 

hibernate.session_factory_name

org.hibernate.SessionFactory 創建后,將自動使用這個名字綁定到 JNDI 中。

 

hibernate.max_fetch_depth

為單向關聯(一對一,多對一)的外連接抓取(outer join fetch)樹設置最大深度。

03

hibernate.default_batch_fetch_size

  Hibernate 關聯的批量抓取設置默認數量。

4816

hibernate.default_entity_mode

 為由這個 SessionFactory 打開的所有 Session指定默認的實體表現模式。

dynamic-mapdom4jpojo

hibernate.order_updates

 強制 Hibernate 按照被更新數據的主鍵,為SQL 更新排序。這么做將減少在高並發系統中事務的死鎖。

true|false

 

hibernate.generate_statistics

 如果開啟,Hibernate 將收集有助於性能調節的統計數據。

true|false

 

hibernate.use_identifier_rollback

如果開啟,在對象被刪除時生成的標識屬性將被重設為默認值。

true|false

 

hibernate.use_sql_comments

如果開啟,Hibernate 將在 SQL 中生成有助於調試的注釋信息,默認值為 false

true|false

false

Hibernate JDBC 和連接(connection)屬性、Hibernate 緩存屬性、Hibernate 事務屬性等主要用於提升性能,並且Hibernate有適當的默認值。入門者可以忽略這些設置,等學到一定階段,你可以參考官方文檔進行適當配置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM