概念:
Hibernate映射主要是通過對象關系映射文件實現,將對數據庫的操作直接轉換為對實體對象的操作 ,實現了真正的面向對象編程。
目的:
使用映射的目的除了實現面向對象操作同時還提高了效率。
其實建立實體對象間的關聯關系就相當於在多個表間建立約束(只是從表轉換到了對象上)。
分類:
1.基本映射
正確理解各個配置選項的含義是掌握映射文件的關鍵。
映射文件可以對面向對象中的關聯關系、繼承關系和組合關系等各種關系進行配置,下面我們來看一下基本的映射標簽:
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <!-- 映射根節點 -->
- <hibernate-mapping>
- <!--
- 對象關系映射的開始:class元素表示類和數據庫中的表的映射關系。
- name屬性指定持久化類(或者接口)的Java全限定名;
- table屬性指定要映射的對應的數據庫表名(不使用則默認為類名user)
- -->
- <class name="com.dan.hibernate.User" table="t_user">
- <!--
- 持久化類對象的對象標識符(OID)和表的主鍵的映射關聯:
- name屬性指定類中作為OID的屬性名;
- column屬性表中主鍵字段的名字;
- type屬性指定Hibernate的映射類型
- -->
- <id name="id">
- <!-- 指定對象標識符生成器:class屬性指定生成器的類別名 -->
- <generator class="uuid" />
- </id>
-
- <!--
- 普通屬性的映射:
- name屬性:屬性的名字,以小寫字母開頭;
- column屬性:對應的數據庫字段名(不寫則默認為name的名字)
- type屬性:指定Hibernate的映射類型(不寫則默認為實體類屬性的類型)
- -->
- <property name="name" />
- <property name="password" />
- <property name="createTime" />
- <property name="expireTime" />
- </class>
- </hibernate-mapping>
2.關聯映射
對於關聯映射最主要的就是先弄清楚兩者之間的關系(幾對幾),然後再確定由誰來維護關系(一般是多的一端維護關系)。
通過兩者間的關系可以分為以下幾類(具體用法先不在這裡進行闡述了):
多對一關聯映射(多的一端維護關系)
一對一關聯映射
一對一主鍵關聯映射
一對一唯一外鍵關聯映射
一對多關聯映射(多的一端維護關系)
多對多關聯映射(需要建立中間表)
3.繼承映射
每棵類繼承樹一張表:一棵類樹(多個類,有一個根類)只有一張表。
每個類一張表:有多少個類就有多少個表。
每個具體類一張表:有多少個葉子類就有多少個表。
4.復合主鍵映射
通常做法是將主鍵相關字段放到一個單獨的類中,這個類是有要求的:
1.必須實現序列號Serializable接口
2.覆蓋equals和hashcode方法
5.集合映射:
Set、List、Array、Map、Bag集合的映射分別使用<set>標簽,<list>標簽,<array>標簽,<map>標簽,<bag>標簽表示。
6.組件映射:
Compontent是一個值類,從屬於實體類,它與實體類的主要差別在於,它沒有oid;
采用Compontent的好處:實現對象模型的細粒度劃分,復用率高,含義明確,層次分明。