首页
Hibernate学习笔记(三)
我是从b站视频上学习的hibernate框架,其中有很多和当前版本不符合之处,我在笔记中进行了修改
以下是b站视频地址:
https://www.bilibili.com/video/av14626440
*表与表之间的关系回顾(一对多)
1)分类与商品,一个分类可以有多个商品,一个商品只能属于一个分类 *表与表之间的关系回顾(多对多) 1)订单与商品,一个订单里面可以有多个商品,一个商品可以属于多个订单 *表与表之间的关系回顾(一对一) 1)在中国,夫妻关系便是一对一的关系 *hibernate一对多的配置 1.映射配置(以客户和联系人为例) 第一步,创建实体类 第二部,让两个实体类之间相互表示 1)在客户实体类里面使用set集合表示多个联系人
2)在联系人是类中表示所属客户
第三步,配置映射文件 一对多
多对一
第四步,配置核心配置文件
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里面去掉
java
Hibernate
相关
JavaWeb的三大作用域
java中常用数组copy方法
6.Java方法
Java web开发:从零到 Run 一个现有的 Spring Boot 前后端分离项目(前端Vue)
javascript基础知识(29) 实现继承的方式
java 正则表达式
JAVA List<Object[]>取值问题
初次接触Java感受
99乘法表 java for循环
基于java.net.socket包的对象传递
Idea Java项目文件夹后面提示百分数怎么去掉
Java8新特性
标签