我是从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. mysql利用binlog恢复数据

    需求:需要给开发提供一个2018年9月30号的数据,按照我们公司正常备份策略来说,直接找到对应时间的备份数据,解压导入即可,恰好这个时间节点的数据没有,只备份到2018年9月25号的,糟糕了吧 咋办呢 ...

  2. MySQL-03 SQL语句设计

    学习要点 SQL语句分类 DML语句 DML 查询语句 SQL语句分类 数据操纵语言(DML):用来操纵数据库中数据的命令.包括:SELECT.INSERT.UPDATE.DELETE. 数据定义语言 ...

  3. delphi jinchengneicun

    http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Configuring_the_Memory_Manager https://docs.micros ...

  4. hdu3404 Switch lights

    题目描述 题解: 首先,由$SG$定理得SG(x,y)=mex(SG(x',y)^SG(x,y')^SG(x',y'))(x'<x,y'<y) 这里的$SG(x,y)$叫$Nim$积. $ ...

  5. C#对象初始化的探讨

    最近在弄MQ的性能监测数据埋点,无疑中用到一个Nstatsd的客户端,看到里面写过里面一种嵌套类的写法.代码如下: 客户端Client是一个密封的类,并且构造函数私有访问.然后又用一个嵌套类Curre ...

  6. Python3--中括号"[]"与冒号":"在列表中的作用

    先来定义两个列表: liststr = ["helloworld","hahahh","123456"] listnum = [1,2,3, ...

  7. HDU 2196 Computer(求树上每个点的最长距离)

    题意: 这题想了挺久的, 参考了kuangbin大神的代码:https://www.cnblogs.com/kuangbin/archive/2012/08/28/2659915.html 给出树上边 ...

  8. npm 的作用

    接触 npm 也有一个多月的时间了,一直只是将他作为当着 webstorm + node.js 环境中的一个插件来用(甚至说把她当着命令来用).毕竟大部分的时间,他是输入的命令行中的一部分(别笑,小新 ...

  9. JustinMind

    看到公司老板新请来的兼职产品经理,在讲项目功能设计图是,用的是justinmind这个工具,觉得很好奇,默默记下,或许以后能用到.下面是搜的简单的介绍,只是为了记住这个工具名字,现并没有想要深入探究这 ...

  10. Boolean.valueOf("true")的用法

    Boolean.valueOf(a);a为true时返回true不管大小写,a为其他值时都返回false: