Hibernate 映射基礎

Hibernate 對持久化對象的要求

1、提供一個無參的構造器,使Hibernate可以使用Constructor.newInstance()來實例化持久化類。

       注意:在java的類中如果沒有指定構造函數,那麼會有一個默認的構造函數。如果手動定義了一個有參的構造函數,那麼此時默認的無參構造函數                  將不存在,應該再定義一個無參構造函數。

2、提供一個標示屬性,通常映射爲數據庫表的主鍵字段。

3、爲持久化類的字段聲明get/set 方法

4、使用非final類,如果使用fianl類,會影響懶加載特性。

5、重寫equals()和hashCode()方法,如果需要把持久化類的實力放到set集合(當需要進行關聯映射時)中,則應該重寫這兩個方法。


一般每一個實體類對應一個*.hbm.xml文件。配置方法及屬性如下:


<hibernate-mapping>
	<!-- 
		name屬性:哪個類
		table屬性:對應哪個表,如果不寫,默認的表名就是類的簡單名稱
		
	 -->
	<class name="edu.fjnu.domain.User" table="t_user">
		<id name="id" type="int" column="id">
            <generator class="sequence">
            	<param name="sequence">SEQUENCE_ON_USER</param>
            </generator>
		</id>
		<!-- 
			普通屬性(數據庫中的基本類型,如字符串、日期、數字等)
				name屬性:對象的屬性名,必須有
				type屬性:類型,如果不寫,Hibernate會自動檢測
						可以寫Java中類的全名
						或是寫hibernate類型 
				column屬性:對應的表中的列名,如果沒有默認爲屬性名。
				length屬性:長度,不是所有的類型都有長度屬性,比如vachar2有,但int沒有,
                                            如果不寫默認爲255
				not-null:非空約束,默認爲false
		 -->
		<property name="name" type="string" column="name" length="20" not-null="true"/>
		<property name="age" type="int" column="age"/>
		<property name="birthday" type="date" column="birthday"/>
		<!-- 當列名與關鍵字衝突時,可以通過column屬性指定一個其他的列名。
			  或是使用反引號包圍起來
			  指定使用text類型時,最好再指定length,以確定生成的SQL類型是能夠存放指定數量的字符的
		 -->
		<property name="desc" type="text" length="5000" column="`desc`"/>
		<!-- 圖片,二進制類型,最好指定長度 -->
		<property name="photo" type="binary" length="102400"></property>
	</class>
</hibernate-mapping>


映射主鍵屬性

第7行class中可以指定主鍵生成的策略:

        1、identity:使用數據庫的自動增長策略,不是所有數據庫都支持,比如oracle就不支持

        2、sequence:oracle中可以使用序列來讓主鍵自動增長

        3、hilo:使用高地位算法來生成的主鍵值。只需要一張額外的表,所有的數據庫都支持

        4、native:根據底層數據庫能力選擇identity、sequence、hilo中的一個。

        5、increment:先查詢當前最大的id值,再加1使用,由hibernate維護的自動增長,有多線程下會有

        6、assigned:手動指定一個主鍵值

        7、uuid:由hibernate自動生成UUID並指定爲主鍵值

<hibernate-mapping package="edu.fjnu.hbm_id">
	<class name="User" table="t_user">
		<!-- id元素用戶映射主鍵
		     子元素generator是用於指定主鍵生成策略的
		 -->
		<id name="id" type="int" column="id">
                     <generator class="assigned"/>
		</id>
	
		<property name="name" type="string" column="name" length="20" not-null="true"/>
	</class>
</hibernate-mapping>












發佈了53 篇原創文章 · 獲贊 18 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章