【java开发----mybatis(三)】

本文深入解析MyBatis中的一对一、一对多和多对多关联关系,涵盖关联关系概述、关联映射配置、性能优化与延迟加载,助力开发者高效利用MyBatis进行数据库操作

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言


之前初步了解了mybatis,现在进一步了解mybatis关系映射

一、关联关系概述

实际的开发中,对数据库的操作常常会涉及到多张表,这在面向对象中就涉及到了对象与对象之间的关联关系。针对多表之间的操作,MyBatis提供了关联映射,通过关联映射就可以很好的处理对象与对象之间的关联关系。

在关系型数据库中,多表之间存在着三种关联关系,分别为一对一、一对多和多对多,如下图所示:
在这里插入图片描述
在这里插入图片描述

在Java中,通过对象也可以进行关联关系描述,如图下图所示:

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

二、三种关系

1.一对一

在现实生活中,一对一关联关系是十分常见的。例如,一个人只能有一个身份证,同时一个身份证也只会对应一个人。

在这里插入图片描述
<association>元素中,通常可以配置以下属性:
在这里插入图片描述
MyBatis加载关联关系对象主要通过两种方式:嵌套查询和嵌套结果。
虽然使用嵌套查询的方式比较简单,但是嵌套查询的方式要执行多条SQL语句,这对于大型数据集合和列表展示不是很好,因为这样可能会导致成百上千条关联的SQL语句被执行,从而极大的消耗数据库性能并且会降低查询效率。
使用MyBatis的延迟加载在一定程度上可以降低运行消耗并提高查询效率。MyBatis默认没有开启延迟加载,需要在核心配置文件中的<settings>元素内进行配置,具体配置方式如下:

    <settings>
            <setting name="lazyLoadingEnabled" value="true" />  
            <setting name="aggressiveLazyLoading" value="false"/>  
    </settings>

在这里插入图片描述

2.一对多

开发人员接触更多的关联关系是一对多(或多对一)。例如,一个用户可以有多个订单,同时多个订单归一个用户所有。
<collection>子元素的属性大部分与<association>元素相同,但其还包含一个特殊属性–ofType 。
在这里插入图片描述
<collection >元素的使用也非常简单,同样可以参考如下两种示例进行配置,具体代码如下:

在这里插入图片描述


3.多对多

在实际项目开发中,多对多的关联关系也是非常常见的。以订单和商品为例,一个订单可以包含多种商品,而一种商品又可以属于多个订单。
在这里插入图片描述
在数据库中,多对多的关联关系通常使用一个中间表来维护,中间表中的订单id作为外键参照订单表的id,商品id作为外键参照商品表的id
在这里插入图片描述
在MyBatis中,多对多的关联关系查询,同样可以使用前面介绍的元素进行处理(其用法和一对多关联关系查询语句用法基本相同)。

总结

本章首先对开发中涉及到的数据表之间以及对象之间的关联关系作了简要介绍,并由此引出了MyBatis框架中对关联关系的处理;然后通过案例对MyBatis框架处理实体对象之间的三种关联关系进行了详细讲解。
通过本章的学习,读者可以了解数据表以及对象中所涉及到的三种关联关系,并能够使用MyBatis框架对三种关联关系的查询进行处理。MyBatis中的关联查询操作在实际开发中非常普遍,熟练掌握这三种关联查询方式有助于提高项目的开发效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值