歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Hibernate中的映射

概念:

Hibernate映射主要是通過對象關系映射文件實現,將對數據庫的操作直接轉換為對實體對象的操作 ,實現了真正的面向對象編程。

目的:

   使用映射的目的除了實現面向對象操作同時還提高了效率。

   其實建立實體對象間的關聯關系就相當於在多個表間建立約束(只是從表轉換到了對象上)。

分類:

1.基本映射

   正確理解各個配置選項的含義是掌握映射文件的關鍵。

   映射文件可以對面向對象中的關聯關系、繼承關系和組合關系等各種關系進行配置,下面我們來看一下基本的映射標簽:

  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <!-- 映射根節點 -->  
  6. <hibernate-mapping>  
  7.     <!--   
  8.         對象關系映射的開始:class元素表示類和數據庫中的表的映射關系。  
  9.         name屬性指定持久化類(或者接口)的Java全限定名;  
  10.         table屬性指定要映射的對應的數據庫表名(不使用則默認為類名user)          
  11.      -->  
  12.     <class name="com.dan.hibernate.User" table="t_user">  
  13.         <!--   
  14.             持久化類對象的對象標識符(OID)和表的主鍵的映射關聯:  
  15.             name屬性指定類中作為OID的屬性名;  
  16.             column屬性表中主鍵字段的名字;  
  17.             type屬性指定Hibernate的映射類型            
  18.          -->  
  19.         <id name="id">  
  20.             <!-- 指定對象標識符生成器:class屬性指定生成器的類別名 -->  
  21.             <generator class="uuid" />  
  22.         </id>  
  23.           
  24.         <!--   
  25.             普通屬性的映射:  
  26.             name屬性:屬性的名字,以小寫字母開頭;  
  27.             column屬性:對應的數據庫字段名(不寫則默認為name的名字)  
  28.             type屬性:指定Hibernate的映射類型(不寫則默認為實體類屬性的類型)  
  29.         -->        
  30.         <property name="name" />  
  31.         <property name="password" />  
  32.         <property name="createTime" />  
  33.         <property name="expireTime" />  
  34.     </class>  
  35. </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的好處:實現對象模型的細粒度劃分,復用率高,含義明確,層次分明。

Copyright © Linux教程網 All Rights Reserved