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的好处:实现对象模型的细粒度划分,复用率高,含义明确,层次分明。

相关内容