文章原地址:
http://yunshuisuiyuan.iteye.com/blog/1682005
什么是 ORM 映射:
Object Relationship Mapping :对象 关系 映射。
在关系型数据库中,一张表中有很多字段,而这些字段分为两类:
关系字段: 引用关系 ,外键引用 字段,引用另外一张表的一条记录 。
普通字段: 仅作为记录信息的字段存在
在开发当中,我们希望能设计一个类其 属性 能将表中的 字段 完全对应,将一条记录存放在一个类的对象中。
于是就有了 ORM 映射的需求,针对不同的 字段 我们如果设计这个类的 属性,给它们对应什么样的 数据类型。
这就是 ORM 映射当中的 重点 : 字段(关系字段) 属性(关系属性) 基本数据类型(新类型)
只要我们在配置属性时去想, 是将 什么 字段 配置成 什么 类型的 属性 就能游刃有余了
在类的设计中,我们可以将 表的 普通字段 设计为 类的 普通属性 ,使用 基本数据类型 就可以存放这些字段的值了。
但是,对于 关系字段 ,我们用什么来存放它呢?
先来看 关系字段 代表了什么:
比如,Person 与 IdCard 两张表,IdCard 中有一个字段 pId 引用了 Person 表的主键 pId。
那么我们可以这样理解,在 IdCard 这张表中,这个小小的 pId 其实就对应了 Person 表的一条记录。
既然 这个 pId 对应的是 Person 表的一条记录,转换为类的设计,我们可以看做这个
pId 其实就对应了一个 Person 类的对象。
这样,这个关系就明确了,那就是 关系字段 其实对应了关系表中的 一条 或 多条记录。
所以,对于 关系字段,我们在设计类的时候就用 一个对象 或 一个集合 来存放它。
接下来就是 映射:
1.对于 普通的字段,我们用 基本数据类型 的 属性 就可以存放这些字段的值了。
所以就有了 属性映射标签:Hibernate为我们提供的属性映射标签为 <property>
- <property name="属性 名称" coloumn="字段" type="数据类型"></property>
在Hibernate中,如果 字段 对应的属性 名称 相同则可以省略 colomn 属性。数据类型是基本数据类型亦可省略。
2.对于 关系字段 与 关系对象(集合) 的映射,于是乎就有了 关系映射标签。
Hibernate为我们提供了四个常用的关系映射标签 :
- 一对一
- <one-to-one name="属性 名称" class="关系类型"
- foreign-key="关系字段" lazy="false" cascade="all">
- </one-to-one>
- 一对多
- <set name="集合 属性 名称">
- <key column="关系字段"></key>
- <one-to-many class="关系类型"></one-to-many>
- </set>
- 多对一
- <many-to-one name="属性 名称" class="关系类型"
- cascade="save-pdate" lazy="false">
- <column name="关系字段"></column>
- </many-to-one>
- <key-many-to-one name="属性 名称" class="关系类型" >
- <column name="关系字段" />
- </key-many-to-one>
- 多对多
- <set name="集合 属性 名称" inverse="true"
- cascade="none" table="中间表">
- <key column="外键关系字段" /> // 中间表引用当前表中的字段
- <many-to-many class="关系类型" column="关系字段"/>
- </set>