Hibernate配置檔案詳解

小花貓Jane發表於2017-12-27

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

hibernate.cfg.xml 中加入元素 <property>、<mapping>,放置在類路徑(classpath)的根目錄下。

1.

hibernate.properties 放置放在類路徑的根目錄下。

2.

可程式設計的配置方式,即在程式中配置
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配置屬性,

當然我們載入了配置檔案就不能使用這個方法了

1

2

3

4

5

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例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"www.hibernate.org/dtd/hiberna…">

<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>

<br>

hibernate.properties

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

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

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

一個
hibernate.properties例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

#資料庫使用的驅動類

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類在同一包(目錄)中。

1

2

3

4

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)樹設定最大深度。

0到3

hibernate.default_batch_fetch_size

為 Hibernate 關聯的批量抓取設定預設數量。

4、8、16

hibernate.default_entity_mode

為由這個 SessionFactory 開啟的所有 Session指定預設的實體表現模式。

dynamic-map,dom4j,pojo

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有適當的預設值
。入門者可以忽略這些設定,等學到一定階段,你可以參考官方文件進行適當配置。

想要學習前端開發的同學,可以加群:
543627393
學習哦!


相關文章