ORM进阶之 ORM简介

ORM进阶之Hibernate简介及框架搭

ORM进阶之Hibernate的三大对象

ORM进阶之Hibernate中对象的三大状态解析

ORM进阶之Hibernate中一对一的关系映射

映射可以说是在hibernate中非常重要的一个内容,通过映射可以让程序员不再思考复杂的sql语句,而是更加的专注于业务逻辑的实现。映射通过一个xml配置文件完成并且我们可以对他进行修改!下边我们来看一下如何完成映射的!

单表映射

每个实体对应一张表,跟其他的实体没有关联关系,这是最简单的一种方式,下边我们看一下,如何通过实体映射到数据库中。我们的实体User的代码

<span style="font-size:18px;">/*** User实体* @author hongjie**/
public class User {//主键private int id;//用户名private String username;//密码private String  passwords;public int getId() {return id;}public void setId(intid) {this.id = id;}public String getUsername() {return username;}public void setUsername(Stringusername) {this.username = username;}public String getPasswords() {return passwords;}public void setPasswords(Stringpasswords) {this.passwords = passwords;}
}</span>

映射文件的代码User.hbm.xml 的代码

<span style="font-size:18px;"><?xml version="1.0"?>
<!DOCTYPE hibernate-mappingPUBLIC"-//Hibernate/Hibernate Mapping DTD3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--package   对应实体所在包 -->
<hibernate-mappingpackage="com.tgb.domain">
<!-- table 为映射到数据库中的表名 , 默认与实体名一致 --><class name="User" table="t_users"><id name="id" type="java.lang.Integer"><generator class="native"/></id><property name="username"/><property name="passwords"/></class>
</hibernate-mapping></span>

通过这样的简单的两个配置文件,就能将我们的实体映射到数据库中了!这也是最简单的一种映射方式。但是在实际中很少有所有的实体之间都没有关系的。

一对一关系映射

还有一种一对一的关系,比如说一个用户只能有一个身份证信息,我们要把身份证信息单独存储,这样我们的用户实体和身份证实体就是一个一对一的关系,肯定是先有人,然后才有身份证信息,所以用户应该为主,身份证信息为从,用户维护者身份证信息。hibernate的一对一关系有两种形式,一种是共享主键方式,另一种是唯一外键方式.。我们该怎么来表示这样关系呢! 看一下代码。

共享主键方式

        顾名思义,就是一个人的两条记录使用同一个主键,当我们创建了用户后,在创建身份证信息时,他会自动去取他对应的用户信息的主键。这样就可以使用同一个主键了。
       下边我们看一下代码,
package com.tgb.domain;
/*** User实体* @author hongjie**/
public class User {//主键private int id;//用户名private String username;//密码private String  passwords;//卡信息private Card card;public Card getCard() {return card;}public void setCard(Card card) {this.card = card;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPasswords() {return passwords;}public void setPasswords(String passwords) {this.passwords = passwords;}
}
</pre><pre name="code" class="html">public class Card {//主键private int cardId;//身份证信息 private String cardInfo;//用户信息private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public int getCardId() {return cardId;}public void setCardId(int cardId) {this.cardId = cardId;}public String getCardInfo() {return cardInfo;}public void setCardInfo(String cardInfo) {this.cardInfo = cardInfo;}}

上边是两个实体的的代码,我们可以看到在user中具有card的引用,在card中也有user的引用,这样为双向关联,根据其中任何一个信息,都可以取到另一个信息。看一下我们配置文件的代码

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- package   对应实体所在包 -->
<hibernate-mapping package="com.tgb.domain">
<!--     table 为映射到数据库中的表名 , 默认与实体名一致 --><class name="User" table="t_users" ><id name="id" type="java.lang.Integer"><generator class="native"/></id><property name="username"/><property name="passwords"/><!-- card关联, cascade="all" 对user的所有操作 都进行级联操作 --><one-to-one name="card" class="Card" cascade="all"></one-to-one></class>
</hibernate-mapping>
</pre><pre name="code" class="html"><?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- package   对应实体所在包 -->
<hibernate-mapping package="com.tgb.domain">
<!--     table 为映射到数据库中的表名 , 默认与实体名一致 --><class name="Card" table="t_card" ><id name="id" type="java.lang.Integer"><generator class="foreign"><!--使用主键关联,引用User对应表的主键作为自己的主键-->   <param name="property">user</param><!--此处的user必须和下面配置的one-to-one的name属性一样 -->   </generator>  </id><property name="cardInfo"/><!-- 用户属性,constrained在这里必须为true 这里使用的是双向关联映射,要不然会有重复数据读。 --><one-to-one name="user" class="User" constrained="true"></one-to-one></class>
</hibernate-mapping>

通过上边的配置文件,我们就创建好了一个一对一的唯一主键关联映射。下边我们在看一下一对一的另一种实现方式外键关联。

外键关联

    我们pojo类,还是上边的那两个类,我们只是修改了配置文件,配置文件如下
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- package   对应实体所在包 -->
<hibernate-mapping package="com.tgb.domain">
<!--     table 为映射到数据库中的表名 , 默认与实体名一致 --><class name="User" table="t_users" ><id name="id" type="java.lang.Integer"><generator class="native"/></id><property name="username"/><property name="passwords"/>
<!--         持有card 的属性,  --><one-to-one name="card" class="Card" fetch="join" cascade="all" ></one-to-one>   </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- package   对应实体所在包 -->
<hibernate-mapping package="com.tgb.domain">
<!--     table 为映射到数据库中的表名 , 默认与实体名一致 --><class name="Card" table="t_card" ><id name="id" type="java.lang.Integer"><generator class="foreign"><!--使用主键关联,引用User对应表的主键作为自己的主键-->   <param name="property">user</param><!--此处的user必须和下面配置的one-to-one的name属性一样 -->   </generator>  </id><property name="cardInfo"/>
<!--         该为多对一unique 设置为true,这样就保证了唯一性。 --><many-to-one name="user" class="User" unique="true" ></many-to-one>  </class>
</hibernate-mapping>

可以看到我们只是简单的修改了一下配置文件,就把他变成了唯一外键约束了。这样也可以实现一对一映射。 下篇博客将为大家讲解多对一映射,敬请期待。

ORM进阶之Hibernate中关系映射相关推荐

  1. ORM进阶之Hibernate 的三大对象

    ORM进阶之 ORM简单介绍 ORM进阶之Hibernate 简单介绍及框架搭 ORM进阶之Hibernate 的三大对象 我们在上一篇博客中讲到了怎样搭建一个Hibernate框架, 提到Hiber ...

  2. Hibernate对象关系映射详解之一对多关系映射

    Hibernate对象关系映射详解之"一对多"关系映射 之前学习Hibernate框架的时候,对这七大关系映射一直是云里雾里的,虽然可以仿照写出代码,但是不能独立编写出来.鉴于工作 ...

  3. hibernate继承关系映射方法(一)--共享一张表

    对于如下关系: Person.java package com.hust.PO;public class Person {private Integer id;private String name; ...

  4. hibernate 表关系映射详解之继承关系

    举例:亚马逊的网上商城可以卖很多东西,比如说图书,电器,水果等等,那么我们以面向对象的理念去抽象一个商品类,他具有商品的共有属性,比如说上架时间,当前         价格,优惠价格等待,商品可以继承 ...

  5. 什么是JAP,什么是ORM,与hibernate的关系

    (1).JPA介绍: JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口.JPA吸取了目前Java持久化技术的优 ...

  6. 详谈Hibernate框架关系映射!

    接触Hibernate也有一小段的时间了,愈发的觉得Hibernate是个神奇的东西,为什么这么说呢?因为你可以不懂一行sql,直接面向对象,就可以将数据直接保存到数据库去!! 你还可以保存一个对象, ...

  7. Java程序员从笨鸟到菜鸟之(五十八)细谈Hibernate(九)hibernate一对一关系映射...

    一对一关系映射即为关系双方都含有对方一个引用,其实在生活中一对一关系也很常见,比如人和×××,学生和学号等,都是一对一的关系映射,一对一映射分为单向的和双向的,没种关系映射又可以分为主键关联映射,唯一 ...

  8. Hibernate - 对象关系映射文件(*.hbm.xml)详解

    对象关系映射文件,即POJO 类和数据库的映射文件*.hbm.xml(映射文件的扩展名为 .hbm.xml). POJO 类和关系数据库之间的映射可以用一个XML文档来定义. 通过 POJO 类的数据 ...

  9. Hibernate 一对一关系映射总结篇

    在Hibernate 关系映射中一对一是比较常见也常用的一种,一对一的关系映射类型中又可分为:一对一外键单向映射.一对一外键双向映射.一对一主键单向映射和一对一主键双向映射. 下面就简单的说下自己对这 ...

最新文章

  1. 多表查询事务DCL权限管理
  2. IC/FPGA 设计资源整理推荐
  3. MongoDB实战(4)MapReduce
  4. MySQL从入门到精通50讲(一)-MySQL数据库操作创建数据库及删除数据库
  5. zynq中mgtx应用_【干货分享】ZYNQ常用外设设计 (上)
  6. 路由器经常掉线,必须重新插拔网线才能上网,什么原因?
  7. 用js实现的对css的一些操作方法
  8. 友元关系可以继承_C++知识点 30:友元
  9. j2me 移植 android,J2me移植Android初步探索
  10. 中国主要水系、河流、湖泊数据矢量数据(shp格式)下载地址
  11. 傲澜智伴机器人_通辽智伴机器人,智伴机器人招商,傲澜智伴机器人
  12. [label][WorldPress] 一个很方便查找定位WorldPress源代码位置的网址
  13. nextdate函数白盒测试问题 软件测试_NextDate函数测试用例
  14. 整除分块 B - Make Divisible
  15. java下载网站图片代码_java下载网上的图片到本地
  16. 苹果网页显示无法连接服务器失败怎么办啊,苹果手机自带的浏览器显示无法连接互联网是怎么回事啊...
  17. 已知函数fx=sin(wx+φ)_考点13 y=sin(wx+φ)的图像与性质(解析版)
  18. sql语句存储过程的写法(mysql和java)
  19. free Code Camp Slasher Flick(截断数组)
  20. 语义分割系列14-DMNet(pytorch)实现

热门文章

  1. API 网关 (API Gataway)
  2. 华裔女性钱璐璐:用 DNA 开发人工智能神经网络,识别手写数字!
  3. webstorm和网站制作
  4. ncloth创建枕头
  5. C++:VS2019调用lib
  6. java代码在u盘里面运行_在u盘安装有jdk,在win7系统上怎么运行java程序
  7. python集合中,|与and,or的区分
  8. 四巯基卟啉修饰的金属有机框架材料(UiO66)|ZIF67纳米颗粒修饰的C3N4氮化碳(C3N4)|Fe3O4@MOF-199@C18磁性纳米材料
  9. com.github.abel533.mapper插件使用报错,求助!!!
  10. 立象Argox OX- 100条码机如何打印标签