【SSM】Mybatis的高级映射

备表模拟

什么是一对多的关系?多对一呢?

举个通俗的例子:一家软件公司存在很多个软件工程师,在公司的角度上看问题就是一对多的关系而在软件工程师的角度上看就是多对一的关系

所以是一对多还是多对一主要是立场不同罢了。哪个在前哪个为主,一对多就是一是主,多对一就是多是主。

备表

自己模拟时,可以按照 一对多,两张表,多的表加外键的方式进行设计表。

  • 班级表:t_clazz

在这里插入图片描述

  • 学生表:t_student

在这里插入图片描述
这里一个班级中有多个学生,也可称为一对多的关系。

😊多对一(高级映射)

多个学生对应一个班级。

设计 bean 类时,这里把 Clazz 班级类对象作为学生类 Student 的一个私有属性。

在这里插入图片描述

🎈方式一、 级联属性映射

一条SQL 语句,级联属性映射。

级联属性映射,就是利用resultMap标签对属性和字段进行映射,内部对象的所属属性也进行映射,而SQL语句就进行表的连接进行查询。

在这里插入图片描述

查询结果:

在这里插入图片描述

🎈方式二、association

association 翻译为关联的意思。它是resultMap 标签中的一个子标签。
也是用来处理映射的,当一对象属性中存在另一个对象时,可以利用association 指明其对象中属性及其对应映射

下面让Student 对象关联 Clazz 对象处理多对一的查询。一条SQL 语句。

在这里插入图片描述

测试效果:

在这里插入图片描述

🎈方式三、分步查询(常用)

这种方式常用,有可复用性强,支持懒加载等优点。利用 asociation 标签下的 select 属性和 column 属性。

  • 复用性加强:各 SQL 语句分别开可以对外使用,除了可以处理该查询,还可以供其他业务使用。
  • 延迟加载/懒加载:延迟加载的核心原理是用的时候执行查询语句,不用的时候不查询。作用就是提高性能。(就是可以避免表瞎连接,尽可能少查)

没使用延迟加载的测试结果:

在这里插入图片描述

在这里插入图片描述

开启延迟加载

association 标签中添加 fetchType="lazy"。默认情况下是没有开启延迟加载的。

注意:这种在association 标签中配置 fetchType="lazy" 是局部配置,只对当前association所关联的resultMap 所使用。

如何全局打开?

在核心配置文件中 settings 标签下配置,全局配置 lazyLoadingEnabled 的设置。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在实际开发中,大部分都需要使用延迟加载的,所以建议开启全部的延迟加载机制。在mybatis 核心配置文件中添加全局配置:lazyLoadingEnabled = true.

如果有特殊需求某个不需要使用懒加载,那么可以在对应的resultMap 下的 association 下设置 fetchType="eager"

😊一对多(高级映射)

一个班级有多个学生。

设置 bean 类时,可以在 Clazz 类中添加一个 Student 集合,该私有属性用来执行多个学生。

在这里插入图片描述

🎈方式一、collection

collection 标签中 ofType 属性填集合或者数组中的元素类型。

在这里插入图片描述

在这里插入图片描述

🎈方式二、分步查询(常用)

在这里插入图片描述

在这里插入图片描述

✌️总结

  1. 不管是多对一还是一对多,最常用的查询方式是分步查询;
  2. 设置全局的延迟加载是在settings 标签下对 lazyLoadingEnabled 进行设置。
  3. 分布查询中,association 标签下的javaType 属性和collection 标签下的 ofType 属性,如果对应的查询语句(映射接口方法)有返回值的话,mybatis可以自行推断,不写也不会报错。但是非分布查询的,javaTypeofType 属性是必须设置的,不然mybatis 无法知道所指定的类型。
  4. 延迟加载的是使用时才会去执行对应的SQL语句,作用是为了提高性能。
  5. 多对多,三张表,相关联,两外键 这样设计的表,可以转换成两个一对多,处理起来与上面类似。
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

假正经的小柴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值