关联关系概述
-
在关系型数据库中,多表之间存在着三种关联关系,分别是:一对一、一对多、多对多
关联关系图1
-
在Java中,通过对象进行关联关系描述
关联关系图2
MyBatis中的一对一关联关系
- 例子:现实生活中一个人只能 有一个身份证,一个身份证对应一个人
- <resultMap>元素中,包含了一个<association>子元素,MyBatis就是通过该子元素处理一对一关联关系的
<association>元素中,可配置以下属性

MyBatis加载关联关系对象主要通过2种方式:
嵌套查询:通过执行另外一条SQL映射语句来返回预期的复杂类型
嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
嵌套查询、嵌套结果区别

MyBatis延迟加载的配置
-
使用MyBatis的延迟加载在一定程度上可以降低运行消耗并提高查询效率。MyBatis默认没有开启延迟加载。需要在核心配置文件中的<setting>元素内进行配置。配置如下:
具体配置方式
示例
MyBatis中的一对多关联关系
- 例子:一个用户可以有多个订单,同时多个订单归一个用户所有
- <resultMap>元素中,包含了一个<collection>子元素,MyBatis就是通过该子元素处理一对多关联关系的
- <collection>子元素的属性大部分与<association>元素相同,但其还包含一个特殊属性——ofType(用于指定实体对象中集合类属性所包含的元素类型/表示属性集合中元素的类型,List<orders>属性即ofType为orders)
示例
MyBatis中的多对多关联关系
- 例子:一个订单可以有多种商品,而一种商品也可以属于多个订单
-
在数据库中,多对多的关联关系通常使用一个中间表来维护(如:中间表中的订单id作为外键参照订单表的id,商品id作为外键参照商品表的id)
网友评论