Hibernate配置文件詳解

Hibernate配置方式

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

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

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

hibernate.properties能夠很是的簡潔明瞭,而且有一種linux配置文件的風格。以#開始一行的註釋,用鍵值對的方式存儲配置參數。 linux

對於這兩種方式,結果都是同樣的。只是看我的喜愛。關於配置參數咱們稍後討論。 sql

Configuration類

org.hibernate.cfg.Configuration實例的做用是對Hibernate進行配置,以及對它進行啓動。在Hibernate的啓動過程當中,Configuration類的實例首先讀取Hibernate配置文件,加載配置信息,而後加載映射文件,建立一個SessionFactory對象。 數據庫

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

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

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

Configuration經常使用操做函數 安全

1.加載Hibernate配置文件session

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有適當的默認值。入門者能夠忽略這些設置,等學到必定階段,你能夠參考官方文檔進行適當配置。

相關文章
相關標籤/搜索