Hibernate基础(3)

一、Hibernate进阶
1. 表与表之间的关系
1.一对多
(1)分类和商品
(2)客户和联系人
(3)一对多建表
通过外键建立关系:在多的一方创建字段作为外键,指向一方的主键
2. 多对多
(1) 订单和商品
(2)用户和角色
(3)多对多建表
创建第三张表维护关系:至少有两个字段作为外键,指向两个表的主键
3. 一对一
2. Hibernate一对多操作
以客户和联系人为例
1. 一对多映射配置
(1)创建实体类
(2) 让实体类之间相互表示
(a)在客户实体类里表示多个联系人
一个客户里有多个联系人
(b)在联系人实体类里表示所属客户
一个联系人只能属于一个客户
(3)配置映射关系
(a) 一个实体类对应一个映射文件
(b) 写映射的基本配置
(c) 在映射文件中配置一对多的关系
(a)在客户实体类里表示多个联系人
<set name="实体类中联系人的名称">
<key cloumn= ""></key>
<one-to-many class="联系人的实体类全路径"/>
</set>
(b)在联系人实体类里表示所属客户
<many-to-one name="客户的名称" class=“客户实体类的全路径” column="外键名称">

</many-to-one>
(d)创建核心配置文件,关联实体类配置文件
2. 一对多级联操作
(1) 级联保存
(1)添加一个客户,为这个客户添加多个联系人
(2)操作:
(a) 创建实体类的对象
(b) 相互关联实体类
(c) 保存到数据库
简单方法:
在映射文件中配置
<set name cascade="save-update">
(2) 级联删除
(1) 删除某一个客户,与客户关系的联系人都删除
(2) 操作:
(a) 在客户映射文件set标签,进行配置
<set name cascade="save-update,delete">
(b) 在代码中直接删除客户
根据ID查询对象,调用Session对象的delete方法
3. 一对多修改操作
先查询出数据,再修改持久态的数据
Hibernate默认双方都维护外键关系,影响性能,解决方法:
在“一”的一个放弃维护外键关系,使用inverse=true

3. Hibernate多对多操作
以用户和角色为例
1. 多对多映射配置
(1)创建实体类
(2) 让实体类之间相互表示
(a)用户里表示所有角色,使用Set集合
(b)一个角色有多个用户,使用Set集合
(3)配置映射关系
(a) 一个实体类对应一个映射文件
(b) 写映射的基本配置
用户:
<set name="角色集合名称" table="第三张表名称">
<key cloumn="当前映射文件在第三张表中的外键的名称">
</key>
<many-to-many class="角色实体类的全路径名" column="角色在第三张表中的外键的名称">
</many-to-many>
</set>
角色:
<set name="用户集合名称" table="第三张表名称">
<key cloumn="当前映射文件在第三张表中的外键的名称">
</key>
<many-to-many class="用户实体类的全路径名" column="用户在第三张表中的外键的名称">
</many-to-many>
</set>
(c) 配置多对多关系
(4)创建核心配置文件,关联实体类配置文件

2. 多对多级联保存
根据用户保存角色
(1)在用户映射文件中set标签进行配置,cascade=save-update
(2)代码:
(a)创建用户和角色对象
(b)将角色保存到用户中,再保存用户

3. 多对多级联删除
(1)在set标签中进行配置,cascade=delete
(2)删除用户
直接删除
4. 维护第三张表
用户和角色多对多关系,通过第三张表维护
(1)让某个用户有某个角色
(a)根据ID查询用户和角色
(b)把角色放到用户里
把角色对象放到用户Set集合中
(2)让某个用户没有某个角色
(a)根据ID查询用户和角色
(b)从用户里把角色去掉
从用户的Set集合中把角色去掉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值