我是从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. webpack打包 css文件里面图片路径 替换位置

    { test: /\.css$/, use: ExtractTextPlugin.extract({ use: ['css-loader?minimize', 'autoprefixer-loader ...

  2. 1-jdk的安装与配置

    1- Jvm.jdk.jre之间的关系 JVM:Java虚拟机,保证java程序跨平台.(Java Virtual Machine) JRE: Java运行环境,包含JVM和核心类库.如果只是想运行j ...

  3. spring boot 自动生成mybatis代码

    1)在pom.xml中增加generator插件 <!--自动生成mybaits--> <plugin> <groupId>org.mybatis.generato ...

  4. mysql在线开启或禁用GTID模式

    在线开启步骤: 1.要求: (1)必须是5.7.6版本以上的mysql (2)GTID状态为OFF 2.开启步骤: (1):SET GLOBAL ENFORCE_GTID_CONSISTENCY = ...

  5. Linux基础测试

    目 录 第1章 文件及目录课后作业    1 第2章 Linux打包与压缩习题    1 第3章 Linux系统VIM编辑器习题    1   文件及目录课后作业 从/proc/meminfo中过滤出 ...

  6. JavaScript中函数的定义

    JavaScript中函数的定义 制作人:全心全意 在JavaScript中,函数是由关键字function.函数名加一组参数以及置于大括号中需要执行的一段代码定义的.定义函数的基本语法格式如下: f ...

  7. git服务器端安装

    一.服务器端安装 git支持四种传输协议 1.本地协议 2.ssh协议 3.git协议 4.http/s协议 [root@zabbix ~]# cat /etc/redhat-release Cent ...

  8. Python中的函数(2)

    一.实参和形参        def greet_user(username): """显示简单的问候语,且显示用户名""" print(& ...

  9. POJ 2267 From Dusk till Dawn or: Vladimir the Vampire(最短路变形)

    题意: 有一个吸血鬼要旅游, 他只能在晚上6点到第二天凌晨6点行动(18:00 ~ 6:00), 然后每天中午12点要喝1L的血(12:00), 现有m条火车的发车时间和行程时间, 问他从a到达b需要 ...

  10. SqlParameter[] parameters

    SqlParameter[] parameters = { new SqlParameter("@rdTypeName", readertype.rdTypeName), new ...