Hibernate 中的 ORM 映射 原理

什么是 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> 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值