hibernate的Configuration和配置文件
一、hibernate的入口Configuration
? ? ?
? ? ?在Hibernate中,Configuration是hibernate的入口。在實例化一個Configuration的時候,Hibernate會自動在環境變量(classpath)里面查找Hibernate配置文件hibernate.properties。如果該文件存在,則將該文件的內容加載到一個Properties的實例GLOBAL_PROPERTIES里面,如果不存在,將打印信息hibernate.properties not found;
? ? ?接下來Hibernate將所有系統環境變量(System.getProperties())也添加到GLOBAL_PROPERTIES里面。如果配置文件hibernate.properties存在,系統還會進一步驗證這個文件配置的有效性,對于一些已經不支持的配置參數,系統將打印出警告信息。?
? ? ?默認狀態下configure()方法會自動在環境變量(classpath)下面尋找Hibernate配置文件hibernate.cfg.xml,如果該文件不存在,系統會打印如下信息并拋出HibernateException異常: hibernate.cfg.xml not found;如果該文件存在,configure()方法會首先訪問<session-factory>,并獲取該元素name的屬性,如果name的屬性非空,將用這個配置的值來覆蓋hibernate.properties的hibernate.session_factory_name的配置的值,從這里我們可以看出,hibernate.cfg.xml里面的配置信息可以覆蓋hibernate.properties的配置信息。
二、Configuration常用操作函數
(1)使用Hibernate配置文件
? ? ?1、??Configuration 指定映射文件
? ? ? ? ?Configuration cfg=new Configuration().configure("/hibernate.cfg.xml");
? ? ? ? ?或者Configuration cfg=new Configuration().configure("/hibernate.properties");
? ? ?2、Configuration指定映射文件
? ? ? ? ?cfg.addResource("test/User.hbm.xml");
? ? ?3、Configuration指定POJO類,User.hbm.xml根User.java一個目錄
? ? ? ? ?cfg.addClass(test.Order.class);
(2) 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");
?
?
(3) SessionFactory
? ? 1、單個?SessionFactory實例
?
? ? ? ?SessionFactory sessions = cfg.buildSessionFactory();
? ? ? 當所有映射定義被 Configuration 解析后,應用程序必須獲得一個用于構造org.hibernate.Session 實例的工廠SessionFactory。這個工廠將被應用程序的所有線程共享,線程安全的全局對象,只需要被實例化一次。單例模式。
? ??
? ? 2、Hibernate 允許應用程序創建多個SessionFactory 實例
? ? ? ??用xml配置來配置多個數據庫的話,那就寫多個配置文件。
? ? ? ?對應兩個數據庫(一個是MySQL,一個是SQLServer),可以把其xml文件定義為“mysql.cfg.xml” 和 “sqlserver.cfg.xml”。
? ? ? ? Configuration類獲取SessionFactory的代碼如下:
? ? ? ?SessionFactory mysqlFactory = new Configuration().configure("/mysql.cfg.xml").buildSessionFactory();?
? ? ? ?SessionFactory sqlserverFactory = new Configuration().configure("/sqlserver.cfg.xml ").buildSessionFactory();?
三、Hibernate配置參數詳解
?
1、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 |
2、Hibernate 數據源屬性
| 屬性名 | 用途 |
| hibernate.connection.datasource | 數據源?JNDI 名字 |
| hibernate.jndi.url JNDI | 提供者的?URL(可選) |
| hibernate.jndi.class JNDI | InitialContextFactory 類(可選) |
| hibernate.connection.username | ?數據庫用戶(可選) |
| hibernate.connection.password | 數據庫密碼(可選) |
3、可選的配置屬性
有大量屬性能用來控制 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的Configuration和配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cad带得动的电脑?
- 下一篇: Hibernate之映射