我是从b站视频上学习的hibernate框架,其中有很多和当前版本不符合之处,我在笔记中进行了修改
以下是b站视频地址:
https://www.bilibili.com/video/av14626440

 
*表与表之间的关系回顾(一对多)
1)分类与商品,一个分类可以有多个商品,一个商品只能属于一个分类
 
*表与表之间的关系回顾(多对多)
1)订单与商品,一个订单里面可以有多个商品,一个商品可以属于多个订单
 
*表与表之间的关系回顾(一对一)
1)在中国,夫妻关系便是一对一的关系
 
 
*hibernate一对多的配置
1.映射配置(以客户和联系人为例)
第一步,创建实体类
第二部,让两个实体类之间相互表示
1)在客户实体类里面使用set集合表示多个联系人
2)在联系人是类中表示所属客户
第三步,配置映射文件
一对多
多对一
第四步,配置核心配置文件
<!--   
                mysql5 数据库方言设置为org.hibernate.dialect.MySQL5Dialect ,使用org.hibernate.dialect.MySQLDialect不知为何会报DDL错误
-->
 
2.一对多级联操作
级联操作
1,级联保存
2,级联删除
 
一对多的级联保存
添加客户,为这个客户添加一个联系人
1)复杂写法
2)简化写法
一般根据客户添加联系人
第一步 在客户的映射文件中配置
在客户映射文件中set标签上进行配置cascade属性
 
第二步 只需要把联系人添加到客户里面,最终只需要保存客户对象
 
一对多的级联删除
需求:删除某个客户,把这个客户里面的联系人一并删除
实现:
第一步:在客户的映射文件set标签中进行配置
        使用属性cascade属性值delete
 
第一步:在代码中直接删除客户
1)查询对象,调用session里面的delete方法删除
2)执行过程
1,根据id查询客户
2,根据客户查询联系人
3,将联系人的cid字段设置为null
4,先删除联系人,再删除客户
 
 
 
一对多的修改操作
修改小红所属的客户(持久态自动修改数据库)
 
 
inverse属性
因为hibernate双向维护外键,客户和联系人都需要修改外键,修改客户时修改了一次,修改联系人的时候也修改了一次,所以会出现两次update,造成性能问题
解决方式:让其中一方放弃维护外键
一对多里面可以让其中一的那一方放弃外键维护
 
Hibernate多对多操作
多对多映射配置
以用户和角色为例演示
第一步 创建实体类,用户和角色
 
第二步 让两个实体类互相表示
1)用户里面表示所有角色,使用set集合
2)一个角色有多个用户,使用set集合
 
第三步 配置映射关系
1)基本配置
2)配置多对多关系(重点)
 
发现问题:
第四步 在核心配置文件中引入映射文件
 
测试:
 
多对多级联保存
根据用户保存角色
第一步 在用户配置文件中的set标签进行配置,cascade值save-update
第二步 写代码实现
1)创建角色用户对象,把角色放到用户里面,最终保存用户
//添加两个用户,为每个用户添加两个角色
       //1,创建对象
       User user1 = new User();
       user1.setUser_name("lucy");
       user1.setUser_password("123");
       
       User user2 = new User();
       user2.setUser_name("mary");
       user2.setUser_password("456");
       
       
       Role r1 = new Role();
       r1.setRole_name("总经理");
       r1.setRole_memo("总经理");
       
       Role r2 = new Role();
       r2.setRole_name("秘书");
       r2.setRole_memo("秘书");
       
       Role r3 = new Role();
       r3.setRole_name("保安");
       r3.setRole_memo("保安");
       
       //2.建立关系,把角色放到用户里面
       //user1······r1,r2
       //user2······r2,r3
       user1.getRoleSet().add(r1);
       user1.getRoleSet().add(r2);
       
       user2.getRoleSet().add(r2);
       user2.getRoleSet().add(r3);
       //3.保存用户
       session.save(user1);
       session.save(user2);
 
 
多对多级联删除(了解)
第一步 在set标签上进行配置,cascade值delete
第二部 删除用户
 
维护第三张表
1.用户和角色是多对多的关系,维护关系通过维护第三张表
2.让某个用户有某个角色
第一步 现根据id查询出用户和角色
第二部 把角色放到用户里面去
1)把角色对象放到用户的set集合中去
3让某个用户失去某个角色
第一步 现根据id查询出用户和角色
第二步 把角色从set里面去掉
 
 
 

Hibernate学习笔记(三)的更多相关文章

  1. Hibernate学习笔记三:对象关系映射(一对一,一对多,多对一,多对多)

    如需转载,请说明出处:http://www.cnblogs.com/gudu1/p/6895610.html Hibernate通过关系映射来表示数据库中表与表之间的关系,关系映射可以通过两种方式:配 ...

  2. Hibernate学习笔记三

    1.1.1 Hibernate的关联关系映射:(多对多) 1.1.1.1 多对多的配置: 步骤一创建实体和映射: Student: public class Student { private Int ...

  3. Hibernate学习笔记三 多表

    一对多|多对一 表中的表达 实体中的表达 实体代码: package com.yyb.domain; import java.util.HashSet; import java.util.Set; p ...

  4. Hibernate学习笔记三:常用数据库操作语句

    转载请注明原文地址: 一:HQL 1:HQL语句格式:select from POJO类名 where 条件表达式 group by 属性 having 聚集函数 order by 属性 [其中,fr ...

  5. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  6. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  7. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  8. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

  9. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

  10. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

随机推荐

  1. Js 之获取QueryString的几种方法

    一.正则匹配 function getQueryString(name) { var reg = new RegExp('(^|&)' + name + '=([^&]*)(& ...

  2. iview tabs里面放入 i-switch 注意slot不是写在 props里面

    iview tabs里面放入 i-switch 注意slot不是写在 props里面 <Tabs value="name1"> <TabPane :label=& ...

  3. Wow64

    翻译自Wikipedia: WoW64 运行在微软平台上,WoW64(Windows 32-bit on Windows 64-bit) 是一个Windows的子操作系统, 它能运行32位的应用,在所 ...

  4. SQL Sever中多列拼接成一列值为NULL

    查询出数据 SELECT a.ID AS KYMain_ID , ',' + a.Leader + ',' AS KYMain_Leader , ), b.TaskLeader) FROM TB_KY ...

  5. oracle插入多表(insert all/first)

    1.建测试表   CREATE TABLE EDW_INT   (     AGMT_NO         VARCHAR2(40 BYTE)             NOT NULL,     AG ...

  6. MySQL丨03丨基本语句

    MySQL语句都是以 ; 号结尾的 看库(刘大婶直接面对的是各种档案袋) show databases; 建库(新弄了一个档案袋) create database database_name; 删库( ...

  7. 树梅派 -- 通过/sys读写ADC芯片 pcf8591

    通过wiringPi等library, 在user space 通过/dev/i2c来读写i2c设备的方案不在本文讨论了. 编译SENSORS_PCF8591 模块 在Default raspberr ...

  8. CSS--浮动与定位

    *浮动布局能够实现横向多列布局. 1.在网页中,元素有三种布局模型: 1.流动模型(Flow) 2.浮动模型 (Float) 3.层模型(Layer) 流动(Flow)是默认的网页布局模式.流动布局模 ...

  9. Python 2 和 Python 3 主要区别有哪些(1)

    Guido(Python之父,仁慈的独裁者)在设计 Python3 的过程中,受一篇文章 “Python warts” 的影响,决定不向后兼容,否则无法修复大多数缺陷.---摘录自<流畅的Pyt ...

  10. shiro框架的四中权限控制方式

    https://www.cnblogs.com/cocosili/p/7103025.html 一.在自定义的realm中进行权限控制 在applicationContext.xml文件中添加  /a ...