深入學習Hibernate4_02 hibernate.cfg.xml文件和xxx.hbm.xml文件詳解

hibernate.cfg.xml

Hibernate 配置文件主要用於配置數據庫連接和 Hibernate 運行時所需的各種屬性

每個 Hibernate 配置文件對應一個 Configuration 對象,Hibernate配置文件可以有兩種格式:    hibernate.properties             hibernate.cfg.xml
但在這裏,只談:hibernate.cfg.xml文件


<hibernate-configuration>

	<session-factory>
	
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>     -----指定Hibernate的數據庫方言
		<property name="connection.url">jdbc:mysql://localhost:3306/mysql</property>  ------指定鏈接數據庫的URL
		<property name="connection.username">root</property>  -----數據庫用戶名
		<property name="connection.password">ddd</property>------數據庫密碼
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>  -----數據庫驅動
		<property name="myeclipse.connection.profile">mySQLConnect</property>   ------連接數據庫的名字
		
		<property name="show_sql">true</property>  ----在控制檯打印生成的SQL語句
		<property name="format_sql">true</property>  ---格式化SQL,適合開發者閱讀
		
               <!--  需要注意的是,需要首先導入c3p0的jar包  -->
          <property name="hibernate.c3p0.max_size">10</property>    --連接池最大的連接數
          <property name="hibernate.c3p0.min_size">5</property>   ---連接池最小的連接數
          <property name="c3p0.acquire_increment">2</property>   ---當併發訪問比較大的時候,每次自動獲得2個鏈接,數量視情況而定
          <property name="hibernate.c3p0.timeout">2000</property>  ---數據庫連接池中連接對象在多長時間沒有使用過後,就應該被銷燬
          <property name="c3p0.idle_test_period">2000</property> ---表示連接池檢測線程多長時間檢測一次池內的所有鏈接對象是否超時.
          <property name="c3p0.max_statements">10</property>   緩存 Statement 對象的數量

		<mapping resource="entity/CourseSelectUser.hbm.xml" />   -----對象關係映射文件
	</session-factory>

</hibernate-configuration>


xxx.hbm.xml(hb--->hibernate,m--->mapping

       POJO 類和關係數據庫之間的映射可以用一個XML文檔來定義。
      通過 POJO 類的數據庫映射文件,Hibernate可以理解持久化類和數據表之間的對應關係,也可以理解持久化類屬性與數據庫表列之間的對應關係
      在運行時 Hibernate 將根據這個映射文件來生成各種 SQL 語句
      映射文件的擴展名爲 .hbm.xml

<hibernate-mapping>
    <class name="entity.CourseSelectUser" table="course_select_user" catalog="courseselectsystem" dynamic-update="true">  (class Name:指持久化類,table:指數據庫中的表,catalog:指數據庫  ,若設置爲 true, 表示當更新一個對象時, 會動態生成 update 語句, update 語句中僅包含所有取值需要更新的字段. 默認值爲 false  )
        <id name="id" type="java.lang.Integer">   name:類對象的屬性
            <column name="id" />     對應的表中的字段
            <generator class="native"></generator>    指主鍵生成策略,一般寫native
        </id>
        <property name="userNumber" type="java.lang.String"> name:類對象的屬性  type:類對象的屬性的數據類型
            <column name="user_number" not-null="true"></column>      對應的表中的字段
        </property>

       <!-- 映射派生屬性 -->

       <property name="desc" formula="(SELECT concat(author, ': ', title) FROM NEWS n WHERE n.id = id)"></property>

    </class>
</hibernate-mapping>


generator: 設定持久化類設定標識符生成器


increment 標識符生成器

         1.increment 標識符生成器由 Hibernate 以遞增的方式爲代理主鍵賦值

         2.Hibernate 會先讀取 NEWS 表中的主鍵的最大值, 而接下來向 NEWS 表中插入記錄時, 就在 max(id) 的基礎上遞增, 增量爲 1

         3.適用範圍:1)由於 increment 生存標識符機制不依賴於底層數據庫系統, 因此它適合所有的數據庫系統,2)適用於只有單個 Hibernate 應用進程訪問同一個數 據庫的場合, 在集羣環境下不推薦使用它

        4.OID 必須爲 long, int 或 short 類型, 如果把 OID 定義爲 byte 類型, 在運行時會拋出異常

identity 標識符生成器

        1.identity 標識符生成器由底層數據庫來負責生成標識符, 它要求底層數據庫把主鍵定義爲自動增長字段類型

        2.適用範圍:由於 identity 生成標識符的機制依賴於底層數據庫系統, 因此, 要求底層數據庫系統必須支持自動增長字段類型. 支持自動增長字段類型的數據庫包括: DB2, Mysql, MSSQLServer, Sybase

        3.OID 必須爲 long, int 或 short 類型, 如果把 OID 定義爲 byte 類型, 在運行時會拋出異常

sequence 標識符生成器

       1.sequence  標識符生成器利用底層數據庫提供的序列來生成標識符.

             
     
2.Hibernate 在持久化一個 News 對象時, 先從底層數據庫的 news_seq 序列中獲得一個唯一的標識號, 再把它作爲主鍵值

      3.適用範圍:由於 sequence 生成標識符的機制依賴於底層數據庫系統的序列, 因此, 要求底層數據庫系統必須支持序列. 支持序列的數據庫包括: DB2, Oracle

hilo 標識符生成器

     1.hilo 標識符生成器由 Hibernate 按照一種 high/low 算法*生成標識符, 它從數據庫的特定表的字段中獲取 high 值.

                         

    2.Hibernate 在持久化一個 News 對象時, 由 Hibernate 負責生成主鍵值. hilo 標識符生成器在生成標識符時, 需要讀取並修改 HI_TABLE 表中的 NEXT_VALUE 值.

    3.適用範圍:  1)由於 hilo 生存標識符機制不依賴於底層數據庫系統, 因此它適合所有的數據庫系統。   2)OID 必須爲 long, int 或 short 類型, 如果把 OID 定義爲 byte 類型, 在運行時會拋出異常

native 標識符生成器

    1.native 標識符生成器依據底層數據庫對自動生成標識符的支持能力, 來選擇使用 identity, sequence 或 hilo 標識符生成器. 

    2.適用範圍:  1)由於 native 能根據底層數據庫系統的類型, 自動選擇合適的標識符生成器, 因此很適合於跨數據庫平臺開發 .    2)OID 必須爲 long, int 或 short 類型, 如果把 OID 定義爲 byte 類型, 在運行時會拋出異常




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章