Hibernate_day03--课程安排_表之间关系_一对多操作
Hibernate_day03
上节内容
|
1 实体类编写规则 2 hibernate主键生成策略 3 实体类操作 (1)crud操作 (2)实体类对象状态 4 hibernate的一级缓存 5 hibernate的事务操作 (1)事务代码规则写法 6 hibernate其他的api(查询) |
今天内容
|
1 表与表之间关系回顾 (1)一对多(客户和联系人) (2)多对多(用户和角色) 2 hibernate一对多操作 (1)*一对多映射配置 (2)一对多级联保存(同时操作多个表进行保存) (3)一对多级联删除 (4)inverse属性 3 hibernate多对多操作 (1)*多对多映射配置 (2)多对多级联保存(重点) (3)多对多级联删除 (4)维护第三张表 |
表与表之间关系回顾(重点)
|
1 一对多 (1)分类和商品关系,一个分类里面有多个商品,一个商品只能属于一个分类 (2)客户和联系人是一对多关系 - 客户:与公司有业务往来,百度、新浪、360 - 联系人:公司里面的员工,百度里面有很多员工,联系员工 ** 公司和公司员工的关系 - 客户是一,联系人是多 - 一个客户里面有多个联系人,一个联系人只能属于一个客户 (3)一对多建表:通过外键建立关系
2 多对多 (1)订单和商品关系,一个订单里面有多个商品,一个商品属于多个订单 (2)用户和角色多对多关系 - 用户: 小王、小马、小宋 - 角色:总经理、秘书、司机、保安 ** 比如小王 可以 是总经理,可以是司机 ** 比如小宋 可以是司机,可以是秘书,可以保安 ** 比如小马 可以是 秘书,可以是总经理 - 一个用户里面可以有多个角色,一个角色里面可以有多个用户 (3)多对多建表:创建第三张表维护关系
3 一对一 (1)在中国,一个男人只能有一个妻子,一个女人只能有一个丈夫 |
Hibernate的一对多操作(重点)
一对多映射配置(重点)
|
以客户和联系人为例:客户是一,联系人是多 第一步 创建两个实体类,客户和联系人 第二步 让两个实体类之间互相表示 (1)在客户实体类里面表示多个联系人 - 一个客户里面有多个联系人 //在客户实体类里面表示多个联系人,一个客户有多个联系人 具体: public class Customer {
(2)在联系人实体类里面表示所属客户 - 一个联系人只能属于一个客户 //在联系人实体类里面表示所属客户,一个联系人只能属于一个客户 具体: public class LinkMan {
第三步 配置映射关系 (1)一般一个实体类对应一个映射文件 (2)把映射最基本配置完成 Customer.hbm.xml <!-- 1 配置类和表对应 LinkMan.hbm.xml <!-- 1 配置类和表对应 (3)在映射文件中,配置一对多关系 - 在客户映射文件中,表示所有联系人 Customer.hbm.xml <!-- 在客户映射文件中,表示所有联系人 - 在联系人映射文件中,表示所属客户 LinkMan.hbm.xml <!-- 表示联系人所属客户 第四步 创建核心配置文件,把映射文件引入到核心配置文件中
测试: 运行HibernateUtils.java工具类 public class HibernateUtils {
|
一对多级联操作
|
级联操作 1 级联保存 (1)添加一个客户,为这个客户添加多个联系人 2 级联删除 (1)删除某一个客户,这个客户里面的所有的联系人也删除 |
一对多级联保存
|
1 添加客户,为这个客户添加一个联系人 (1)复杂写法: public class HibernateOnetoMany {
(2)简化写法 - 一般根据客户添加联系人 第一步 在客户映射文件中进行配置 - 在客户映射文件里面set标签进行配置
第二步 创建客户和联系人对象,只需要把联系人放到客户里面就可以了,最终只需要保存客户就可以了 //演示一对多级联保存 简单写法 |
一对多级联删除
|
1 删除某个客户,把客户里面所有的联系人删除 2 具体实现 第一步 在客户映射文件set标签,进行配置 (1)使用属性cascade属性值 delete
第二步 在代码中直接删除客户 (1)根据id查询对象,调用session里面delete方法删除
3 执行过程: (1)根据id查询客户
(2)根据外键id值查询联系人
(3)把联系人外键设置为null
(4)删除联系人和客户
|
一对多修改操作(inverse属性)
|
1 让小容联系人所属客户不是小李,而是小王 //1 根据id查询小容联系人,根据id查询小王的客户 2 inverse属性 (1)因为hibernate双向维护外键,在客户和联系人里面都需要维护外键,修改客户时候修改一次外键,修改联系人时候也修改一次外键,造成效率问题
(2)解决方式:让其中的一方不维护外键 - 一对多里面,让其中一方放弃外键维护 - 一个国家有总统,国家有很多人,总统不能认识国家所有人,国家所有人可以认识总统 (3)具体实现: 在放弃关系维护映射文件中,进行配置,在set标签上使用inverse属性
|
Hibernate_day03--课程安排_表之间关系_一对多操作的更多相关文章
- 【转】Oracle - 数据库的实例、表空间、用户、表之间关系
[转]Oracle - 数据库的实例.表空间.用户.表之间关系 完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机 ...
- Django数据库的查看、删除,创建多张表并建立表之间关系
配置以下两处,可以方便我们直接右键运行tests.py一个文件,实现对数据库操作语句的调试: settings里面的设置: #可以将Django对数据库的操作语法,能输出对应的的sql语句 LOGGI ...
- 阶段3 1.Mybatis_09.Mybatis的多表操作_1 mybatis表之间关系分析
4.mybatis中的多表查询 表之间的关系有几种: 一对多 多对一 一对一 多对多 举例: 用户和订单 ...
- Hibernate中表与表之间的关联一对多,级联保存和级联删除
1:Hibernate的一对多操作(重点) 一对多映射配置 第一步:创建两个实体类:客户和联系人(例)以客户为一,联系人为多: package com.yinfu.entity; public cla ...
- 数据库设计,表与表的关系,一对多。One-To-Many(2)
一对多:主键数据表中只能包含一个记录,而在其关系记录表中这条记录可以与一个或多个记录相关,也可以没有记录与之相关. 关联映射:一对多/多对一存在最普遍的映射关系,简单来讲就如球员与球队的关系:一对多: ...
- mysql 建立表之间关系 练习 1
练习:账号信息表,用户组,主机表,主机组 #用户表 mysql> create table user( id int not null unique auto_increment, userna ...
- mysql 建立表之间关系 练习 2
创建数据库db6 create database db6 charset=utf8; user db6; # 创建班级表 mysql) not null unique); Query OK, rows ...
- Oracle - 数据库的实例、表空间、用户、表之间关系
完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等): 2) Oracle数据库实例则是一组Ora ...
- mysql 建立表之间关系 一对一 练习1
创建db5数据库 create database db5 charset=utf8; use db5; 例一:一个用户只有一个博客 用户表: id name 1 mike 2 alex 3 jack ...
随机推荐
- 5分钟教你配置命令行界面的163邮箱client
网易163免费邮箱相关server信息: mutt 是命令行下的邮件client,它仅是管理邮件的组织编辑,邮件的发送和接收须要调用相应的程序. 这里用的各自是getmail 和 msmtp. 过程例 ...
- iOS学习笔记30-系统服务(三)蓝牙
一.蓝牙 随着蓝牙低功耗技术BLE(Bluetooth Low Energy)的发展,蓝牙技术正在一步步成熟,现在的大部分移动设备都配备有蓝牙4.0,相比之前的蓝牙技术耗电量大大减少. 在iOS中进行 ...
- (Windows Maven项目)Redis数据库的安装和操作实现
Redis是一个内存数据库,他会把你写入当中的数据缓存到内存中,之后会周期性的往磁盘中写入.这篇文章中介绍的是在Windows环境下利用Maven工具编译运行Java文件实现Red ...
- 用Reflector for .NET反编译dll文件(.net),把整个dll导出个cs插件
Reflector for .NET 下载地址: http://www.aisto.com/roeder/dotnet/ Reflector.FileDisassembler.zip下载地址: htt ...
- 使用Secure Boot后,导致VMware无法启动虚拟机
最初安装vmware时就报错 Gtk-Message: Failed to load module "canberra-gtk-module": libcanberra-gtk- ...
- python学习之winreg模块
winreg模块将Windows注册表API暴露给了python. 常见方法和属性 winreg.OpenKey(key,sub_key,reserved = ,access = KEY_READ) ...
- 新建一个用户,让他只能看到某一个视图(View),如何设置
新建一个用户,让他只能看到某一个视图(View),怎么设置? 新建一个用户,让他只能看到某一个视图(View),怎么设置? 如果做不到“只能看到指定视图”,最好能做到“对指定表或视图只有查询的权限”. ...
- js prototype 理解
简单理解:prototype对象是实现面向对象的一个重要机制.每个函数也是一个对象,它们对应的类就是 function,每个函数对象都具有一个子对象prototype.Prototype 表示了该函数 ...
- CentOS6.5+nginx+mysql+php(laravel)服务器环境搭建
公司准备迭代会员中心项目,要上laravel框架,替代以前的Ecshop框架,PHP工程师将部分功能页面代码提交,自己也准备着手搭建一个测试环境将项目跑起来: 一. 环境依赖安装设置 关闭防火墙 [r ...
- JS学习笔记(3)--json格式数据的添加,删除及排序方法
这篇文章主要介绍了json格式数据的添加,删除及排序方法,结合实例形式分析了针对一维数组与二维数组的json格式数据进行增加.删除与排序的实现技巧,需要的朋友可以参考下 本文实例讲述了json格式 ...














