Hibernate-关系映射
1.为什么用Hibernate框架:
java程序数据保存的变化:
* 内存存在:java基础中,
数据保存在内存中,只在内存中暂时存在
* 文件保存:有io/流之后,数据可以保存到文件中
* 数据库保存:随着数据量的增大,数据处理变多,
如果继续保存到文件,保存和解析存在格式问题,工作量大,并且重复性高,操作繁琐并且与程序功能关系小,
出现了数据库,对于大量数据的保存和操作都比较节约资源
* jdbc连接数据库:jdbc连接数据库,虽然数据可以保存,但每个操作都有数据库的连接,数据的读取,再解析数据转化为对象,代码重复多
* Hibernate框架:框架就是模板/模型,它把java中从数据库读数据,转化为对象供程序使用的常用代码做成一个工具黑箱,
即对jdbc进行轻量级封装,不需要关心数据库表数据是如何变成对象的,我们只要设置好对应的映射关系,
告诉框架我们是要取对象还是操作对象,框架自动帮我们把这些机械劳动做完,让我们把更多的精力放在程序运行设计上
2.当类之间存在包含关系,怎么在映射里体现?
常用关系映射有四种:
1.单向一对多:
a.实体类:在一的一方添加set集合,泛型指定为多的一方类
private Set jds = new HashSet();
b.映射文件:添加<set>
<set name="jds" > //指定本类set的属性名
<key column="qxid" /> //会在多的一方添加该列
<one-to-many class="Jd" /> //绑定多的一方的类
</set>
2.单向多对一
a.实体类:添加一的一方的类属性
private Qx qx;
b.映射文件:添加<many-to-one>
<many-to-one name="qx" class="Qx" column="qxid" /> //在本类添加该列
指定本类要关联的属性-->指定关联的类-->指定关联的列,会在本类添加
3.多对多:
a.实体类:双方添加set
b.映射文件:就一方而言,每一方都按多对一配置即可
<set name="members" table="r_emp_proj"> //双方都有多个,需要建一个中间表来保存对应关系
<key column="r_proj_id" /> //指定本类关联的列,对方列
<many-to-many
class="com.zhaolong.entity.Employee" column="r_emp_id" /> //指定关联的类和指定关联列
</set>
<set name="projects" table="r_emp_proj" inverse="true"> //有一方放弃列的管理(理解为主键生成的权力)
<key column="r_emp_id" />
<many-to-many
class="com.zhaolong.entity.Project" column="r_proj_id" />
</set> 4.一对一:
a.实体类:添加一的一方的类属性
private Qx qx;
b.映射表:双方添加<one-to-one>
<one-to-one name="card" class="对方类全限定名" />
总结:书写时,先指定本方是用什么关联? 再书写关联的是什么? 用那个列来关联?
多对一和一对多,也可以双向关联,看具体情况,比如从本方查对方数据,就要双向关联
3.inverse cascade 怎么用?
都是在one,many标签中用,inverse为在关联中放弃生成主键权力,cascade为指定在执行何种操作时进行级联,同步删除或更新
Hibernate-关系映射的更多相关文章
- Hibernate学习笔记-Hibernate关系映射
1. 初识Hibernate——关系映射 http://blog.csdn.net/laner0515/article/details/12905711 2. Hibernate 笔记8 关系映射1( ...
- 【SSH 基础】浅谈Hibernate关系映射(4)
继上篇博客 多对多关联映射(单向) 多对多对象关系映射,须要增加一张新表完毕基本映射. Hibernate会自己主动生成中间表 Hibernate使用many-to-many标签来表示多对多的关联,多 ...
- web进修之—Hibernate 关系映射(3)
概述 Hibernate的关系映射是Hibernate使用的难点或者是重点(别担心,不考试哦~),按照不同的分类方式可以对这些映射关系做一个分类,如: 按对象对应关系分: 一对一 多对一/一对多 多对 ...
- Hibernate关系映射时出现的问题
在学习Hibernate框架的关系映射时,遇到了一个问题: INFO: HHH000422: Disabling contextual LOB creation as connection was n ...
- Hibernate关系映射之many-to-many
1.建表 2.创建实体类及映射文件 Student.java类 public class Student implements java.io.Serializable { // Fields pri ...
- hibernate关系映射
多对一:比如多个订单对应同一个用户,需要在订单表中添加一个用户的属性 订单类: private Integer orderId; private Date createTime; private Us ...
- Hibernate关系映射(注解)
1.类级别注解 @Entity 映射实体类 @Table 映射数句库表 @Entity(name="tableName") - 必须,注解将一个类声明为一个实体bea ...
- Hibernate关系映射(三) 多对多
一.使用用户User和Role实现多对多的示例 User.java,实现对Role的引用 package com.lxit.entity; import java.util.HashSet; impo ...
- Hibernate关系映射(三) 多对一和一对多
一.多对一 学生Student和班级Grade实现多对一,多个学生对应一个班级. Student.java实体类,映射了班级的属性. package com.lxit.entity; import j ...
- Hibernate关系映射(二) 基于外键的双向一对一
基于外键的双向一对一关联映射 需要在一端添加<one-to-one>标签,用property-ref来指定反向属性引用. 还是通过刚才用户和地址来演示双向一对一关联. 代码演示 一.实体类 ...
随机推荐
- GO语言(五)项目搭建
<sorter> |------<src>(手动添加,代码存放处) |------sorter.go |------<algorithm> |--- ...
- monodevelop 基础用法
1.mono快捷键 CTRL+K 删除光标所在行的该行后面的代码 CTRL + ALT +C 注释/不注释该行 CTRL+ DOWN 像鼠标滚轮一样向下拖 CTRL + UP 像鼠标滚 ...
- 为什么要使用base64编码,有哪些情景需求?
Base64编码原理与应用 Java实现BASE64编解码 公钥证书也好,电子邮件数据也好,经常要用到Base64编码,那么为什么要作一下这样的编码呢? 我们知道在计算机中任何数据都是按ascii码存 ...
- Yii 读写分离 分表分库
本文转自 http://hudeyong926.iteye.com/blog/1299989 实现一主一从,一主多从,多主多从的读写分离 .支持DAO,AR,其中Query builder只完成部分 ...
- js中返回上一页
<a class="btn btn-danger" href="javascript:history.go(-1);">取消</a>
- TensorFlow基础(二)实现神经网络
(1)前向传播算法 神经网络的前向传播算法主要构成部分: 1.神经网络的输入: 2.神经网络的连接结构:神经网络是由神经元(节点)构成的 3.每个神经元中的参数. (2)TensorFlow随机数生成 ...
- 大数据-图表插件-echarts 样式修改(迭代)
修改折线图大小 myChart.setOption({ title:{ text:"价格指数" ...
- Linux 学习总结(五)-linux 文件系统及相关命令
一 linux文件系统概要 linux系统结构有别用于windos,他是树状结构的文件系统,在linux下我们称一切皆文件,我们将一个目录,可以成称为目录文件.linux只有一个单独的顶级目录结构.所 ...
- 理解JavaScript变量值
JavaScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值是指那些可能由多个值构成的对象. 在将一个值赋给变量时,解析器必须确定这个值是基 ...
- mint-ui 填坑之路
swipe组件 因为项目加载eslint的缘故也就没有像之前的项目一样引用swiper框架.这个轮播图的组件文档实在是不敢恭维(尽管其他的文档也好不到哪里去),官方给出的参数真是少的可怜,一些方法也并 ...