Hibernate 配置Hibernate給人的感受是靈活的,要達到同一個目的,我們可以使用幾種不同的辦法。就拿Hibernate配置來說,常用的有如下三種方式,任選其一。
1.
2.
hibernate.properties可以非常的簡潔明瞭,並且有一種linux配置檔案的風格。以#開始一行的註釋,用鍵值對的方式儲存配置引數。
Configuration類
org.hibernate.cfg.Configuration例項的作用是對Hibernate進行配置,以及對它進行啟動。在Hibernate的啟動過程中,Configuration類的例項首先讀取Hibernate配置檔案,載入配置資訊,然後載入對映檔案,建立一個SessionFactory物件。
·
· 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();
Hibernate 允許你的應用程式建立多個SessionFactory 例項。這對 使用多個資料庫的應用來說很有用。
hibernate.cfg.xml
hibernate.cfg.xml在文件開頭的DTD(文件型別定義)是很複雜的。我們並不需要去理會和記憶他。你可以直接copy它。
hibernate.cfg.xml文件以<hibernate-configuration>為根元素,你可以在其子元素<session-factory>中
·
·
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
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.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 事務屬性等