歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Hibernate中的映射

Hibernate中的映射

日期:2017/3/1 10:27:09   编辑:Linux編程

概念:

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. name屬性:屬性的名字,以小寫字母開頭;
  26. column屬性:對應的數據庫字段名(不寫則默認為name的名字)
  27. type屬性:指定Hibernate的映射類型(不寫則默認為實體類屬性的類型)
  28. -->
  29. <property name="name" />
  30. <property name="password" />
  31. <property name="createTime" />
  32. <property name="expireTime" />
  33. </class>
  34. </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