hibernate的Configuration和配置文件
一、hibernate的入口Configuration
? ? ?
? ? ?在Hibernate中,Configuration是hibernate的入口。在實(shí)例化一個(gè)Configuration的時(shí)候,Hibernate會(huì)自動(dòng)在環(huán)境變量(classpath)里面查找Hibernate配置文件hibernate.properties。如果該文件存在,則將該文件的內(nèi)容加載到一個(gè)Properties的實(shí)例GLOBAL_PROPERTIES里面,如果不存在,將打印信息hibernate.properties not found;
? ? ?接下來(lái)Hibernate將所有系統(tǒng)環(huán)境變量(System.getProperties())也添加到GLOBAL_PROPERTIES里面。如果配置文件hibernate.properties存在,系統(tǒng)還會(huì)進(jìn)一步驗(yàn)證這個(gè)文件配置的有效性,對(duì)于一些已經(jīng)不支持的配置參數(shù),系統(tǒng)將打印出警告信息。?
? ? ?默認(rèn)狀態(tài)下configure()方法會(huì)自動(dòng)在環(huán)境變量(classpath)下面尋找Hibernate配置文件hibernate.cfg.xml,如果該文件不存在,系統(tǒng)會(huì)打印如下信息并拋出HibernateException異常: hibernate.cfg.xml not found;如果該文件存在,configure()方法會(huì)首先訪問(wèn)<session-factory>,并獲取該元素name的屬性,如果name的屬性非空,將用這個(gè)配置的值來(lái)覆蓋hibernate.properties的hibernate.session_factory_name的配置的值,從這里我們可以看出,hibernate.cfg.xml里面的配置信息可以覆蓋hibernate.properties的配置信息。
二、Configuration常用操作函數(shù)
(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一個(gè)目錄
? ? ? ? ?cfg.addClass(test.Order.class);
(2) Configuration指定Hibernate配置屬性(無(wú)配置文件,加載了配置文件就不能使用這個(gè)方法)
? ? 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、單個(gè)?SessionFactory實(shí)例
?
? ? ? ?SessionFactory sessions = cfg.buildSessionFactory();
? ? ? 當(dāng)所有映射定義被 Configuration 解析后,應(yīng)用程序必須獲得一個(gè)用于構(gòu)造org.hibernate.Session 實(shí)例的工廠SessionFactory。這個(gè)工廠將被應(yīng)用程序的所有線程共享,線程安全的全局對(duì)象,只需要被實(shí)例化一次。單例模式。
? ??
? ? 2、Hibernate 允許應(yīng)用程序創(chuàng)建多個(gè)SessionFactory 實(shí)例
? ? ? ??用xml配置來(lái)配置多個(gè)數(shù)據(jù)庫(kù)的話,那就寫(xiě)多個(gè)配置文件。
? ? ? ?對(duì)應(yīng)兩個(gè)數(shù)據(jù)庫(kù)(一個(gè)是MySQL,一個(gè)是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配置參數(shù)詳解
?
1、Hibernate JDBC 屬性
| 屬性名 | 用途 |
| hibernate.connection.driver_class | JDBC driver class |
| hibernate.connection.url | JDBC URL |
| hibernate.connection.username | database user |
| hibernate.connection.password | ?數(shù)據(jù)庫(kù)用戶密碼 |
| hibernate.connection.pool_size | maximum number of pooled connections |
2、Hibernate 數(shù)據(jù)源屬性
| 屬性名 | 用途 |
| hibernate.connection.datasource | 數(shù)據(jù)源?JNDI 名字 |
| hibernate.jndi.url JNDI | 提供者的?URL(可選) |
| hibernate.jndi.class JNDI | InitialContextFactory 類(可選) |
| hibernate.connection.username | ?數(shù)據(jù)庫(kù)用戶(可選) |
| hibernate.connection.password | 數(shù)據(jù)庫(kù)密碼(可選) |
3、可選的配置屬性
有大量屬性能用來(lái)控制 Hibernate 在運(yùn)行期的行為。它們都是可選的,并擁有適當(dāng)?shù)哪J(rèn)值。
| 屬性名 | 用途 | 可選值 ()內(nèi)為默認(rèn) |
| hibernate.dialect | 允許?Hibernate?針對(duì)特定的關(guān)系數(shù)據(jù)庫(kù)生成優(yōu)化的SQL?的?org.hibernate.dialect.Dialect?的類名。 例如:org.hibernate.dialect.MySQLDialect | ? |
| hibernate.show_sql | 輸出所有?SQL?語(yǔ)句到控制臺(tái)。 | true|false (false) |
| hibernate.format_sql | 在?log?和?console?中打印出更漂亮的?SQL。 | true|false (false) |
| hibernate.default_catalog | ?在生成的?SQL?中,將給定的?catalog?附加于非全限定名的表名上 | ? |
| hibernate.session_factory_name | org.hibernate.SessionFactory?創(chuàng)建后,將自動(dòng)使用這個(gè)名字綁定到?JNDI?中。 | ? |
| hibernate.max_fetch_depth | 為單向關(guān)聯(lián)(一對(duì)一,多對(duì)一)的外連接抓取(outer join fetch)樹(shù)設(shè)置最大深度。 | 0到3 |
| hibernate.default_batch_fetch_size | ?為?Hibernate?關(guān)聯(lián)的批量抓取設(shè)置默認(rèn)數(shù)量。 | 4、8、16 |
| hibernate.default_entity_mode | ?為由這個(gè)?SessionFactory?打開(kāi)的所有?Session指定默認(rèn)的實(shí)體表現(xiàn)模式。 | dynamic-map,dom4j,pojo |
| hibernate.order_updates | ?強(qiáng)制?Hibernate?按照被更新數(shù)據(jù)的主鍵,為SQL?更新排序。這么做將減少在高并發(fā)系統(tǒng)中事務(wù)的死鎖。 | true|false ? |
| hibernate.generate_statistics | ?如果開(kāi)啟,Hibernate?將收集有助于性能調(diào)節(jié)的統(tǒng)計(jì)數(shù)據(jù)。 | true|false ? |
| hibernate.use_identifier_rollback | 如果開(kāi)啟,在對(duì)象被刪除時(shí)生成的標(biāo)識(shí)屬性將被重設(shè)為默認(rèn)值。 | true|false ? |
| hibernate.use_sql_comments | 如果開(kāi)啟,Hibernate?將在?SQL?中生成有助于調(diào)試的注釋信息,默認(rèn)值為?false。 | true|false (false) |
?
?
總結(jié)
以上是生活随笔為你收集整理的hibernate的Configuration和配置文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: cad带得动的电脑?
- 下一篇: Hibernate之映射