西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開發(fā)java → JAVA框架Hibernate配置文件詳解

JAVA框架Hibernate配置文件詳解

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:Elysee(祥)時(shí)間:2013/12/23 8:30:54字體大。A-A+

作者:Elysee(祥)點(diǎn)擊:640次評(píng)論:0次標(biāo)簽: Hibernate

Hibernatev4.1.1 官方中文版
  • 類型:教育學(xué)習(xí)大。5.4M語言:中文 評(píng)分:10.0
  • 標(biāo)簽:
立即下載

Hibernate配置文件主要功能是配置數(shù)據(jù)庫(kù)連接和Hibernate運(yùn)行時(shí)所需的各種屬性,配置文件應(yīng)該位于JAVA應(yīng)用或者JAVA Web應(yīng)用的類文件中,剛開始接觸Hibernate的時(shí)候,感覺Hibernate的配置既繁瑣有麻煩,不知道童鞋們?cè)趯W(xué)習(xí)Hibernate的時(shí)候有沒有這種感覺,是不是還在懷念用JDBC連接數(shù)據(jù)庫(kù)呢,但是繁瑣背后隱藏著巨大的價(jià)值,下面我們將帶你一探配置背后的奧秘。

Hibernate配置文件的方式有兩種:一種是通過XML格式文件配置,一種通過JAVA屬性文件配置,屬性文件配置采用的是“鍵=值”對(duì)的方式。建議采用XML格式文件配置格式,XML配置文件可以直接對(duì)映射文件進(jìn)行配置,配置中每一個(gè)類節(jié)點(diǎn)對(duì)應(yīng)數(shù)據(jù)庫(kù)表中的關(guān)聯(lián)信息,在Hibernate初始化階段,mapping節(jié)點(diǎn)由Hibernate自動(dòng)加載到Configration和SessionFactory實(shí)例中。而屬性文件配置必須通過編碼加載映射文件。下面我們將分別對(duì)這兩種方式的使用做介紹

1、使用Hibernate.properties屬性文件

對(duì)于Hibernate.properties屬性文件配置,在其發(fā)布包中的etc下,給出了此文件配置的所有屬性,初學(xué)者可以參照此文件進(jìn)行配置。通過初始化Configuration實(shí)例,通過Configuration實(shí)例來加載映射文件,加載映射文件的方式有兩種,一種是通過加載資源文件的方式,一種是通過加載類的方式:如下所示:

Configration cfg= new Configuration();

加載資源文件方式

cfg.addResouce("User.hbm.xml");

加載類方式

cfg .addClass(com.cn.User.class) ;

通過多次執(zhí)行這兩個(gè)方法可以添加更多的映射文件。因?yàn)橐ㄟ^編碼方式來加載映射文件,當(dāng)項(xiàng)目比較大,資源很多的是時(shí)候,用此方法是件很淚奔的事情,所以不建議采用。

2、使用Hibernate.cfg.xml文件<!--標(biāo)準(zhǔn)的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表 明XML文件的編碼方式-->  

<!--表明解析本XML文件的DTD文檔位置,DTD是DocumentType Definition 的縮寫,  即文檔類型的定義,
XML解析器使用DTD文檔來檢查XML文件的合法性。 /hibernate.sourceforge.net/hibernate-configuration-3.0dtd
可以在Hibernate3.1.3軟件包中的src\org\hibernate目錄中找到此文件-->
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!--聲明Hibernate配置文件的開始-->  
<hibernate-configuration>
<!--表明以下的配置是針對(duì)session-factory配置的,SessionFactory是 Hibernate中的一個(gè)類,
這個(gè)類主要負(fù)責(zé)保存HIbernate的配置信息,以及對(duì)Session的操作-->
    <session-factory>
        <!-- hibernate.dialect 只是Hibernate使用的數(shù)據(jù)庫(kù)方言,就是要用Hibernate連接那種類型的數(shù)據(jù)庫(kù)服務(wù)器 -->
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect        </property>
        
        <!-- 設(shè)置數(shù)據(jù)庫(kù)的連接url:jdbc:mysql://localhost/hibernate,
        其中l(wèi)ocalhost表示mysql服務(wù)器名稱,此處為本機(jī),hibernate是數(shù)據(jù)庫(kù)名 -->
        <property name="connection.url">
            jdbc:mysql://127.0.0.1:3306/HibernateTest
        </property>
        <!-- 連接數(shù)據(jù)庫(kù)是用戶名 -->
        <property name="connection.username">root</property>
        <!-- 連接數(shù)據(jù)庫(kù)是密碼 -->
        <property name="connection.password">123456</property>
        
        <!-- 配置數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序,Hibernate在連接數(shù)據(jù)庫(kù)時(shí),需要用到數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序 -->
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver        </property>
        <!-- jdbc.batch_size是指Hibernate批量插入,刪除和更新時(shí)每次操作的記錄數(shù)。BatchSize越大,
        批量操作的向數(shù)據(jù)庫(kù)發(fā)送Sql的次數(shù)越少,速度就越快,同樣耗用內(nèi)存就越大 -->
        <property name="jdbc.batch_size">30</property>
        <!-- jdbc.use_scrollable_resultset是否允許Hibernate用JDBC的可滾動(dòng)的結(jié)果集。
        對(duì)分頁(yè)的結(jié)果集。對(duì)分頁(yè)時(shí)的設(shè)置非常有幫助 -->
        <property name="jdbc.use_scrollable_resultset">false</property>
        <!-- jdbc.fetch_size是指Hibernate每次從數(shù)據(jù)庫(kù)中取出并放到JDBC的Statement中的記錄條數(shù)。
        FetchSize設(shè)的越大,讀數(shù)據(jù)庫(kù)的次數(shù)越少,速度越快,F(xiàn)etch Size越小,讀數(shù)據(jù)庫(kù)的次數(shù)越多,速度越慢 -->
        <property name="jdbc.fetch_size">50</property>
        <!-- connection.useUnicode連接數(shù)據(jù)庫(kù)時(shí)是否使用Unicode編碼 -->
        <property name="connection.useUnicode">true</property>
        <!-- connection.characterEncoding連接數(shù)據(jù)庫(kù)時(shí)數(shù)據(jù)的傳輸字符集編碼方式,最好設(shè)置為gbk,用gb2312有的字符不全 -->
        <property name="connection.characterEncoding">gbk</property>
        <!-- 是否自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)表  他主要有一下幾個(gè)值:validate:當(dāng)sessionFactory創(chuàng)建時(shí),
        自動(dòng)驗(yàn)證或者schema定義導(dǎo)入數(shù)據(jù)庫(kù)。  create:每次啟動(dòng)都drop掉原來的schema,創(chuàng)建新的。  create-drop:
        當(dāng)sessionFactory明確關(guān)閉時(shí),drop掉schema。update(常用):如果沒有schema就創(chuàng)建,有就更新。 -->
        <property name="hbm2ddl.auto">create</property>
        <!-- 數(shù)據(jù)庫(kù)連接池的大小 -->
        <property name="connection.pool_size">1</property>
        <!-- 配置此處 sessionFactory.getCurrentSession()可以完成一系列的工作,當(dāng)調(diào)用時(shí),  
        hibernate將session綁定到當(dāng)前線程,事務(wù)結(jié)束后,hibernate將session從當(dāng)前線程中釋放,
        并且關(guān)閉session。當(dāng)再次調(diào)用getCurrentSession()時(shí),將得到一個(gè)新的session,并重新開始這一系列工作。 -->
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="myeclipse.connection.profile">mysql</property>
        <!-- 是否在后臺(tái)顯示Hibernate用到的SQL語句,開發(fā)時(shí)設(shè)置為true,便于差錯(cuò),程序運(yùn)行時(shí)可以在Eclipse
        的控制臺(tái)顯示Hibernate的執(zhí)行Sql語句。項(xiàng)目部署后可以設(shè)置為false,提高運(yùn)行效率 -->
        <property name="show_sql">true</property>
        <!-- 指定映射文件為“om/cn/entity/User.hbm.xml -->
        <mapping resource="com/cn/entity/User.hbm.xml" />

    </session-factory>

</hibernate-configuration>

以上是Hibernate的常用配置信息,具體的其他配置信息,可以參考Hibernate的具體配置文件。我們將以current_session_context_class節(jié)點(diǎn)的配置信息講解,當(dāng)此節(jié)點(diǎn)的值設(shè)置為thread時(shí),sessionFactory.getCurrentSession()可以完成一系列的工作,當(dāng)調(diào)用時(shí),hibernate將session綁定到當(dāng)前線程,事務(wù)結(jié)束后,hibernate將session從當(dāng)前線程中釋放,并且關(guān)閉session。當(dāng)再次調(diào)用getCurrentSession()時(shí),將得到一個(gè)新的session,并重新開始這一系列工作。

1 getCurrentSession創(chuàng)建的session會(huì)和綁定到當(dāng)前線程,而openSession不會(huì)。

2 getCurrentSession創(chuàng)建的線程會(huì)在事務(wù)回滾或事物提交后自動(dòng)關(guān)閉,而openSession必須手動(dòng)關(guān)閉

這里getCurrentSession本地事務(wù)(本地事務(wù):jdbc)時(shí) 要在配置文件里進(jìn)行如下設(shè)置

    * 如果使用的是本地事務(wù)(jdbc事務(wù))
 <property name="hibernate.current_session_context_class">thread</property>
 * 如果使用的是全局事務(wù)(jta事務(wù))
 <property name="hibernate.current_session_context_class">jta</property> 

  getCurrentSession () 使用當(dāng)前的session
  openSession()         重新建立一個(gè)新的session 
應(yīng)用程序中,如果DAO 層使用Spring 的hibernate 模板,通過Spring 來控制session 的生命周期,則首選getCurrentSession ()。

使用Hibernate的大多數(shù)應(yīng)用程序需要某種形式的“上下文相關(guān)的” session,特定的session在整個(gè)特定的上下文范圍內(nèi)始終有效。然而,對(duì)不同類型的應(yīng)用程序而言,要為什么是組成這種“上下文”下一個(gè)定義通常是困難的;不同的上下文對(duì)“當(dāng)前”這個(gè)概念定義了不同的范圍。在3.0版本之前,使用Hibernate的程序要么采用自行編寫的基于 ThreadLocal的上下文session,要么采用HibernateUtil這樣的輔助類,要么采用第三方框架(比如Spring或Pico),它們提供了基于代理(proxy)或者基于攔截器(interception)的上下文相關(guān)session。

從3.0.1版本開始,Hibernate增加了SessionFactory.getCurrentSession()方法。一開始,它假定了采用JTA事務(wù),JTA事務(wù)定義了當(dāng)前session的范圍和上下文(scope and context)。Hibernate開發(fā)團(tuán)隊(duì)堅(jiān)信,因?yàn)橛泻脦讉(gè)獨(dú)立的JTA TransactionManager實(shí)現(xiàn)穩(wěn)定可用,不論是否被部署到一個(gè)J2EE容器中,大多數(shù)(假若不是所有的)應(yīng)用程序都應(yīng)該采用JTA事務(wù)管理。基于這一點(diǎn),采用JTA的上下文相關(guān)session可以滿足你一切需要。

最后附上一份從不同層面看Hiberenate的框架圖

接下來的文章,我們將一步一步對(duì)Hibernate方方面面進(jìn)行全面解析。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)