Hibernate學習3--Hibernte的映射關係(基礎概念篇)

前兩節咱們分別從Hibernate的demo和Hibernate的概念上熟悉了Hibernate的使用,這一節咱們來了解Hibernate中的映射關係算法

首先咱們瞭解下Hibernate映射文件中的各類標籤的用法數據庫

1<hibernate-mapping>標籤:網絡

<hibernate-mapping
	auto-import="true|false"
	package="package.name"
 />

(1):package (可選): 指定一個包前綴,若是在映射文檔中沒有指定全限定的類名, 就使用這個做爲包名。app

(2):auto-import(可選 - 默認爲 true ):指定咱們是否能夠在查詢語言中使用非全限定的類名(僅限於本映射文件中的類)。ide

2 <class>標籤:
測試

<class
	name="ClassName"  
	table="tableName"        
	dynamic-update="true|false"
	dynamic-insert="true|false"       
	lazy="true|false"       
/>

(1):name (可選): 持久化類(或者接口)的Java全限定名。 若是這個屬性不存在,Hibernate將假定這是一個非POJO的實體映射。fetch

(2):table (可選 - 默認是類的非全限定名): 對應的數據庫表名。ui

(3): dynamic-update (可選, 默認爲 false ): 指定用於UPDATE 的SQL將會在運行時動態生成,而且只更新那些改變過的字段。編碼

(4):dynamic-insert (可選, 默認爲 false ): 指定用於INSERT 的 SQL 將會在運行時動態生成,而且只包含那些非空值字段。spa

(5):lazy (可選): 經過設置lazy="false" , 全部的延遲加載(Lazy fetching)功能將被所有禁用(disabled)。

<id>標籤:

<id
	name="propertyName" 
	type="typename"
	column="column_name"
	<generator class="generatorClass"/>
</id>

(1):name (可選): 標識屬性的名字。

(2):type (可選): 標識Hibernate類型的名字。
(3):column (可選 - 默認爲屬性名): 主鍵字段的名字。

<generator>標籤:

<id name="id" type="long" column="cat_id">
	<generator class="org.hibernate.id.TableHiLoGenerator">
		<param name="table">uid_table</param>
		<param name="column">next_hi_value_column</param>
	</generator>
</id>

(1):class:主鍵生成器的名稱,Hibernate提供了不少內置的實現:

    a.increment: 用於爲long , short 或者int 類型生成 惟一標識。只有在沒有其餘進程往同一張表中插入數據時才能使用。 在集羣下不要使用。

    b.identity :對DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的內置標識字段提供支持。 返回的標識符是long, short 或者int 類型的。

    c.sequence :在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的標識符是long , short 或者 int 類型的。

    d.uuid :用一個128-bit的UUID算法生成字符串類型的標識符, 這在一個網絡中是惟一的(使用了IP地址)。UUID被編碼爲一個32位16進制數字的字符串。

    e.hilo :使用一個高/低位算法高效的生成long , short 或者 int 類型的標識符。給定一個表和字段(默認分別是hibernate_unique_key 和next_hi )做爲高位值的來源。 高/低位算法生成的標識符只在一個特定的數據庫中是惟一的。

    f.native :根據底層數據庫的能力選擇identity , sequence 或者hilo 中的一個。

    g.assigned :讓應用程序在save() 以前爲對象分配一個標示符。這是 <generator> 元素沒有指定時的默認生成策略。

(2):param:生成器實例須要某些配置值或者初始化參數, 用<param> 元素來傳遞

<property>標籤:

<property
        name="propertyName"
        column="column_name"
        type="typename"
        update="true|false"
        insert="true|false"
        lazy="true|false"
        unique="true|false"
        not-null="true|false"
        length="L"       
/>

(1):name : 屬性的名字,以小寫字母開頭。

(2):column (可選 - 默認爲屬性名字): 對應的數據庫字段名。 也能夠經過嵌套的<column> 元素指定。

(3):type (可選): 一個Hibernate類型的名字。

(4):update, insert (可選 - 默認爲 true ) : 代表用於UPDATE 和/或 INSERT 的SQL語句中是否包含這個被映射了的字段。這兩者若是都設置爲false 則代表這是一個「外源性(derived)」的屬性,它的值來源於映射到同一個(或多個) 字段的某些其餘屬性,或者經過一個trigger(觸發器)或其餘程序生成

(5):lazy (可選 - 默認爲 false ): 指定 指定實例變量第一次被訪問時,這個屬性是否延遲抓取(fetched lazily)( 須要運行時字節碼加強)。

(6):unique (可選): 使用DDL爲該字段添加惟一的約束。 一樣,容許它做爲property-ref 引用的目標。

(7):not-null (可選): 使用DDL爲該字段添加能否爲空(nullability)的約束。

(8):length (可選): 使用DDL爲該字段指定長度。

接下來的一節咱們看看Hibernate中的一一映射,一多映射,多多映射,複合映射和繼承映射。這部份內容比較雜,咱們會根據幾個例子一一測試。

相關文章
相關標籤/搜索