ORM进阶之Hibernate中关系映射
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>
通过上边的配置文件,我们就创建好了一个一对一的唯一主键关联映射。下边我们在看一下一对一的另一种实现方式外键关联。
外键关联
<?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中关系映射相关推荐
- ORM进阶之Hibernate 的三大对象
ORM进阶之 ORM简单介绍 ORM进阶之Hibernate 简单介绍及框架搭 ORM进阶之Hibernate 的三大对象 我们在上一篇博客中讲到了怎样搭建一个Hibernate框架, 提到Hiber ...
- Hibernate对象关系映射详解之一对多关系映射
Hibernate对象关系映射详解之"一对多"关系映射 之前学习Hibernate框架的时候,对这七大关系映射一直是云里雾里的,虽然可以仿照写出代码,但是不能独立编写出来.鉴于工作 ...
- hibernate继承关系映射方法(一)--共享一张表
对于如下关系: Person.java package com.hust.PO;public class Person {private Integer id;private String name; ...
- hibernate 表关系映射详解之继承关系
举例:亚马逊的网上商城可以卖很多东西,比如说图书,电器,水果等等,那么我们以面向对象的理念去抽象一个商品类,他具有商品的共有属性,比如说上架时间,当前 价格,优惠价格等待,商品可以继承 ...
- 什么是JAP,什么是ORM,与hibernate的关系
(1).JPA介绍: JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口.JPA吸取了目前Java持久化技术的优 ...
- 详谈Hibernate框架关系映射!
接触Hibernate也有一小段的时间了,愈发的觉得Hibernate是个神奇的东西,为什么这么说呢?因为你可以不懂一行sql,直接面向对象,就可以将数据直接保存到数据库去!! 你还可以保存一个对象, ...
- Java程序员从笨鸟到菜鸟之(五十八)细谈Hibernate(九)hibernate一对一关系映射...
一对一关系映射即为关系双方都含有对方一个引用,其实在生活中一对一关系也很常见,比如人和×××,学生和学号等,都是一对一的关系映射,一对一映射分为单向的和双向的,没种关系映射又可以分为主键关联映射,唯一 ...
- Hibernate - 对象关系映射文件(*.hbm.xml)详解
对象关系映射文件,即POJO 类和数据库的映射文件*.hbm.xml(映射文件的扩展名为 .hbm.xml). POJO 类和关系数据库之间的映射可以用一个XML文档来定义. 通过 POJO 类的数据 ...
- Hibernate 一对一关系映射总结篇
在Hibernate 关系映射中一对一是比较常见也常用的一种,一对一的关系映射类型中又可分为:一对一外键单向映射.一对一外键双向映射.一对一主键单向映射和一对一主键双向映射. 下面就简单的说下自己对这 ...
最新文章
- 多表查询事务DCL权限管理
- IC/FPGA 设计资源整理推荐
- MongoDB实战(4)MapReduce
- MySQL从入门到精通50讲(一)-MySQL数据库操作创建数据库及删除数据库
- zynq中mgtx应用_【干货分享】ZYNQ常用外设设计 (上)
- 路由器经常掉线,必须重新插拔网线才能上网,什么原因?
- 用js实现的对css的一些操作方法
- 友元关系可以继承_C++知识点 30:友元
- j2me 移植 android,J2me移植Android初步探索
- 中国主要水系、河流、湖泊数据矢量数据(shp格式)下载地址
- 傲澜智伴机器人_通辽智伴机器人,智伴机器人招商,傲澜智伴机器人
- [label][WorldPress] 一个很方便查找定位WorldPress源代码位置的网址
- nextdate函数白盒测试问题 软件测试_NextDate函数测试用例
- 整除分块 B - Make Divisible
- java下载网站图片代码_java下载网上的图片到本地
- 苹果网页显示无法连接服务器失败怎么办啊,苹果手机自带的浏览器显示无法连接互联网是怎么回事啊...
- 已知函数fx=sin(wx+φ)_考点13 y=sin(wx+φ)的图像与性质(解析版)
- sql语句存储过程的写法(mysql和java)
- free Code Camp Slasher Flick(截断数组)
- 语义分割系列14-DMNet(pytorch)实现
热门文章
- API 网关 (API Gataway)
- 华裔女性钱璐璐:用 DNA 开发人工智能神经网络,识别手写数字!
- webstorm和网站制作
- ncloth创建枕头
- C++:VS2019调用lib
- java代码在u盘里面运行_在u盘安装有jdk,在win7系统上怎么运行java程序
- python集合中,|与and,or的区分
- 四巯基卟啉修饰的金属有机框架材料(UiO66)|ZIF67纳米颗粒修饰的C3N4氮化碳(C3N4)|Fe3O4@MOF-199@C18磁性纳米材料
- com.github.abel533.mapper插件使用报错,求助!!!
- 立象Argox OX- 100条码机如何打印标签