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 ...
随机推荐
- http请求返回405
普通情况下,是你用了默认method=get,须要改为post
- Linux-iptables详解
一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防 ...
- centos6.3下yum安装redis
我得是centos 6.3,如果直接用yum安装redis,报错,如下: [root@CentOS6 etc]# yum install redis Loaded plugins: fastestmi ...
- Windows7下搭建Android开发环境
以后工作中要用到android开发,所以想搭建好开发环境,笔记本装的是win7 准备文件: 1 下载Android SDK http://code.google.com/android/downloa ...
- [svc]nginx-module-vts第三方模块安装配置
参考: https://github.com/vozlt/nginx-module-vts#installation https://github.com/kubernetes/ingress-ngi ...
- SpringBoot接口服务处理Whitelabel Error Page
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50915979 <SpringBoot接口服务处理Whitelabel Erro ...
- sqlzoo练习答案--SUM and COUNT
World Country Profile: Aggregate functions This tutorial is about aggregate functions such as COUNT, ...
- 【C语言】20-static和extern关键字2-对变量的作用
一.在Java中,全局变量的定义没有严格的位置规定 全局变量可以定义在类的最前面,也可以定义在类的最尾端,也就说一个方法可以访问在它之后定义的变量. 可以看到,第4行定义的test方法可以访问第8行定 ...
- ISTQB测试人员认证 初级(基础级)大纲
ISTQB测试人员认证 初级(基础级)大纲 ---中文修订版本1(2015年5月6日) 2015-06-22 大纲pdf下载 ISTQB资料中心 在课程大纲中,每个章节都会提供相应的认知水平要求: ...
- 客户端在向服务器的动态页发出请求的时候,服务器才会创建session
注意,纯的HTML页面很有可能导致服务器不会为用户创建session,即便是新到的用户也是如此. 在某些情况下也可能与服务器的具体配置有关系. 尤其是在对session进行监听的时候要注意这一点.