1. 程式人生 > >hibernate配置檔案hibernate.cfg.xml和.hbm.xml的詳細解釋

hibernate配置檔案hibernate.cfg.xml和.hbm.xml的詳細解釋

hibernate.cfg.xml

-標準的XML檔案的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML檔案的編碼方式-->   
                <?xml version='1.0' encoding='gb2312'?>   
<!--表明解析本XML檔案的DTD文件位置,DTD是Document Type Definition 的縮寫,即文件型別的定義,XML解析器使用DTD文件來檢查XML檔案的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3軟體包中的src\org\hibernate目錄中找到此檔案-->   
<!DOCTYPE hibernate-configuration PUBLIC   
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"   
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">   
    <!--宣告Hibernate配置檔案的開始-->        
    <hibernate-configuration>   
    <!--表明以下的配置是針對session-factory配置的,SessionFactory是Hibernate中的一個類,這個類主要負責儲存HIbernate的配置資訊,以及對Session的操作-->   
      <session-factory>      
      <!--配置資料庫的驅動程式,Hibernate在連線資料庫時,需要用到資料庫的驅動程式-->   
          <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver </property>   
      <!--設定資料庫的連線url:jdbc:mysql://localhost/hibernate,其中localhost表示mysql伺服器名稱,此處為本機,    hibernate是資料庫名-->    
            <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate</property>
    <!--連線資料庫是使用者名稱-->   
          <property name="hibernate.connection.username">root </property>   
          <!--連線資料庫是密碼-->   
          <property name="hibernate.connection.password">123456 </property>          
          <!--資料庫連線池的大小-->   
          <property name="hibernate.connection.pool.size">20 </property>          
        <!--是否在後臺顯示Hibernate用到的SQL語句,開發時設定為true,便於差錯,程式執行時可以在Eclipse的控制檯顯示Hibernate的執行Sql語句。專案部署後可以設定為false,提高執行效率-->   
        <property name="hibernate.show_sql">true </property>   
        <!--jdbc.fetch_size是指Hibernate每次從資料庫中取出並放到JDBC的Statement中的記錄條數。Fetch Size設的越大,讀資料庫的次數越少,速度越快,Fetch Size越小,讀資料庫的次數越多,速度越慢-->   
        <property name="jdbc.fetch_size">50 </property>   
        <!--jdbc.batch_size是指Hibernate批量插入,刪除和更新時每次操作的記錄數。Batch Size越大,批量操作的向資料庫傳送Sql的次數越少,速度就越快,同樣耗用記憶體就越大-->   
        <property name="jdbc.batch_size">23 </property>   
        <!--jdbc.use_scrollable_resultset是否允許Hibernate用JDBC的可滾動的結果集。對分頁的結果集。對分頁時的設定非常有幫助-->   
        <property name="jdbc.use_scrollable_resultset">false </property>   
        <!--connection.useUnicode連線資料庫時是否使用Unicode編碼-->   
        <property name="Connection.useUnicode">true </property>   
        <!--connection.characterEncoding連線資料庫時資料的傳輸字符集編碼方式,最好設定為gbk,用gb2312有的字元不全-->   
    <property name="connection.characterEncoding">gbk </property>        
          
        <!--hibernate.dialect 只是Hibernate使用的資料庫方言,就是要用Hibernate連線那種型別的資料庫伺服器。-->   
          <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </property>   
        <!--指定對映檔案為“hibernate/ch1/UserInfo.hbm.xml”-->          
          <mapping resource="org/mxg/UserInfo.hbm.xml">   
  </session-factory>   
  </hibernate-configuration>      
    
    
    
  <bean id="dataSource"    
  class="org.apache.commons.dbcp.BasicDataSource"    
  destroy-method="close">    
//連線驅動      
  <property name="driverClassName" value="${jdbc.driverClassName}" />    
//連線url,      
<property name="url" value="${jdbc.url}" />    
//連線使用者名稱      
  <property name="username" value="${jdbc.username}" />    
//連線密碼      
  <property name="password" value="${jdbc.password}" />    
</bean>    
    
<bean id="hbSessionFactory"    
  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">    
  <property name="dataSource" ref="dataSource" />    
  <property name="configLocation">    
//hibernate配置檔案位置      
  <value>WEB-INF/hibernate.cfg.xml </value>    
  </property>    
  <property name="configurationClass"    
  value="org.hibernate.cfg.AnnotationConfiguration" />    
  <property name="hibernateProperties">    
  <props>    
  //針對oracle資料庫的方言,特定的關係資料庫生成優化的SQL      
    <prop key="hibernate.dialect">    
    org.hibernate.dialect.OracleDialect      
    </prop>    
  //選擇HQL解析器的實現      
    <prop key="hibernate.query.factory_class">    
    org.hibernate.hql.ast.ASTQueryTranslatorFactory      
    </prop>    
    //是否在控制檯列印sql語句      
    <prop key="hibernate.show_sql">true </prop>    
    //在Hibernate系統引數中hibernate.use_outer_join被開啟的情況下,該引數用來允許使用outer join來載入此集合的資料。      
    <prop key="hibernate.use_outer_join">true </prop>    
  //預設開啟,啟用cglib反射優化。cglib是用來在Hibernate中動態生成PO位元組碼的,開啟優化可以加快位元組碼構造的速度      
  <prop key="hibernate.cglib.use_reflection_optimizer">true </prop>    
  //輸出格式化後的sql,更方便檢視      
  <prop key="hibernate.format_sql">true </prop>    
  //“useUnicode”和“characterEncoding”決定了它是否在客戶端和伺服器端傳輸過程中進行Encode,以及如何進行Encode      
  <prop key="hibernate.connection.useUnicode">true </prop>    
  //允許查詢快取, 個別查詢仍然需要被設定為可快取的.      
  <prop key="hibernate.cache.use_query_cache">false </prop>    
  <prop key="hibernate.default_batch_fetch_size">16 </prop>    
    //連線池的最大活動個數      
    <prop key="hibernate.dbcp.maxActive">100 </prop>    
  //當連線池中的連線已經被耗盡的時候,DBCP將怎樣處理(0 = 失敗,1 = 等待,2  =  增長)      
    <prop key="hibernate.dbcp.whenExhaustedAction">1 </prop>    
    //最大等待時間      
    <prop key="hibernate.dbcp.maxWait">1200 </prop>    
    //沒有人用連線的時候,最大閒置的連線個數      
    <prop key="hibernate.dbcp.maxIdle">10 </prop>    
    ##以下是對prepared statement的處理,同上。      
    <prop key="hibernate.dbcp.ps.maxActive">100 </prop>    
    <prop key="hibernate.dbcp.ps.whenExhaustedAction">1 </prop>    
    <prop key="hibernate.dbcp.ps.maxWait">1200 </prop>    
    <prop key="hibernate.dbcp.ps.maxIdle">10 </prop>    
  </props>    
  </property>    
</bean>    

XXX.hbm.xml

<?xml version="1.0"?>  
<!DOCTYPE hibernate-mapping PUBLIC   
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
      
<!--   
    <hibernate-mapping>一般不去配置,採用預設即可。  
    default-cascade="none":預設的級聯風格,表與表聯動。  
    default-lazy="true":預設延遲載入  
 -->  
<hibernate-mapping>  
  
    <!--   
        <class>:使用class元素定義一個持久化類。  
        name="cn.javass.user.vo.UserModel":持久化類的java全限定名;  
        table="tbl_user":對應資料庫表名;  
        mutable="true":預設為true,設定為false時則不可以被應用程式更新或刪除;  
        dynamic-insert="false":預設為false,動態修改那些有改變過的欄位,而不用修改所有欄位;  
        dynamic-update="false":預設為false,動態插入非空值欄位;  
        select-before-update="false":預設為false,在修改之前先做一次查詢,與使用者的值進行對比,有變化都會真正更新;  
        optimistic-lock="version":預設為version(檢查version/timestamp欄位),取值:all(檢查全部欄位)、dirty(只檢查修改過的欄位)、  
                                   none(不使用樂觀鎖定),此引數主要用來處理併發,每條值都有固定且唯一的版本,版本為最新時才能執行操作;  
     -->  
    <class name="cn.javass.user.vo.UserModel" table="tbl_user" dynamic-insert="true" dynamic-update="true" optimistic-lock="version">  
          
        <!--   
            <id>:定義了該屬性到資料庫表主鍵欄位的對映。  
            name="userId":標識屬性的名字;  
            column="userId":表主鍵欄位的名字,如果不填寫與name一樣;  
         -->  
        <id name="userId">  
            <!-- <generator>:指定主鍵由什麼生成,推薦使用uuid(隨機生成唯一通用的表示符,實體類的ID必須是String),
							   native(讓資料庫自動選擇用什麼生成(根據底層資料庫的能力選擇identity,sequence或hilo中的一種)),
							   assigned(指使用者手工填入,預設)。 -->  
            <generator class="uuid"/>  
        </id>  
          
        <!--   
            <version/>:使用版本控制來處理併發,要開啟optimistic-lock="version"和dynamic-update="true"。  
            name="version":持久化類的屬性名,column="version":指定持有版本號的欄位名;  
         -->  
        <version name="version" column="version"/>  
          
        <!--   
            <property>:為類定義一個持久化的javaBean風格的屬性。  
            name="name":標識屬性的名字,以小寫字母開頭;  
            column="name":表主鍵欄位的名字,如果不填寫與name一樣;  
            update="true"/insert="true":預設為true,表示可以被更新或插入;  
         -->  
        <property name="name" column="name" />  
        <property name="sex" column="sex"/>  
        <property name="age" column="age"/>  
          
        <!--   
            元件對映:把多個屬性打包在一起當一個屬性使用,用來把類的粒度變小。  
            <component name="屬性,這裡指物件">  
                <property name="name1"></property>  
                <property name="name2"></property>  
            </component>  
         -->  
           
         <!--   
            <join>:一個物件對映多個表,該元素必須放在所有<property>之後。  
            <join table="tbl_test:子表名">  
                <key column="uuid:子表主鍵"></key>  
            <property name="name1:物件屬性" column="name:子表字段"></property>  
         </join>  
          -->  
           
    </class>  
      
</hibernate-mapping>