我是从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. jstat查看JVM的GC情况

    jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上 ...

  2. Win2D 入门教程 VB 中文版 - 防止内存泄漏

    避免内存泄漏 本文从微软官方文档翻译 http://microsoft.github.io/Win2D/html/RefCycles.htm 如果文档有问题,可以在 https://github.co ...

  3. AS400服务程序总结

    1.服务程序的创建和调用过程 1.1生成module 1.2编写BND文件确定输出接口 1.3生成服务程序 1.3.运行调用程序时,将服务程序导入到作业内存区active group,常驻内存 2.结 ...

  4. PHP CLI应用的调试原理

    我们在Eclipse里选中一个PHP文件,右键选择Debug As->PHP CLI Application. 所谓CLI应用,是指这种脚本文件不需要任何Web服务器即可运行,当然, PHP运行 ...

  5. 【转】关于编写WPF UserControl时提示The name 'InitializeComponent' does not exist in the current contextr的解决!

    1.打开.csproj(工程)文件. 2.找到<Import Project="$(MSBuildBinPath)/Microsoft.CSharp.targets" /&g ...

  6. Gear Pump: Why Install A Pressure Reducing Valve?

    When the     Gear Pump Manufacturers    prompts to install a gear pump, the following points should ...

  7. windwos .bat脚本大全

    记录一个很有用比较全面的windows .bat脚本网站 https://www.cnblogs.com/zhaoqingqing/p/4620402.html

  8. HTML页面中5种超酷的伪类选择器:hover效果

    想在自己的网站中应用超酷的hover效果吗?也许你可以从如下的这些实例中获得一些灵感,如果你喜欢这些效果,也可以直接拷贝代码并应用到你的站点. 给平淡的站点带来活力 hover效果能给网页增加一些动态 ...

  9. 微信小程序:this code is a mock one

    问题 微信小程序调用wx.login() 的 success 函数带的code 提示this code is a mock one 解决方法 appid和微信小程序开发工具所登陆用户管理的小程序清单不 ...

  10. webpack之source map

    先来一个webpack小例子,项目结构如下: // greeter.js module.exports = function() { var greet = document.createElemen ...