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