MyBatis学习 关联映射

关联关系

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

一对一   在任意一方引入对方主键作为外键;
一对多   在“多”的一方,添加“一”的一方的主键作为外键;
多对多   产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或使用新的字段作为主键。


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

一对一

一对一   在本类中定义对方类型的对象,如A类中定义B类类型的属性b,B类中定义A类类型的属性a;
一对多   一个A类类型对应多个B类类型的情况,需要在A类中以集合的方式引入B类类型的对象,在B类中定义A类类型的属性a;
多对多  在A类中定义B类类型的集合,在B类中定义A类类型的集合。

一对一

通过association元素来处理一对一关联关系

在<association>元素中,通常可以配置以下属性:
        property  指定映射到的实体类对象属性,与表字段一一对应
        column     指定表中对应的字段
        javaType   指定映射到实体对象属性的类型
        select     指定引入嵌套查询的子SQL语句,该属性用于关联映射中的嵌套查询
        fetchType   指定在关联查询时是否启用延迟加载。该属性有lazy和eager两个属性值,默认值为lazy(即默认关联映射延迟加载)

<!--property 为类属性  column为 表字段  javaType 关联属性类型  select 嵌套的子查询-->

 

MyBatis加载关联关系对象主要通过两种方式:嵌套查询和嵌套结果
        嵌套查询是通过执行另外一条SQL映射语句来返回预期的复杂类型。
                嵌套查询是在查询SQL中嵌入一个子查询SQL;
                嵌套查询会执行多条SQL语句;
                嵌套查询SQL语句编写较为简单;

        嵌套结果是使用嵌套结果映射来处理重复的联合结果的子集。
                嵌套结果是一个嵌套的多表查询SQL;
                嵌套结果只会执行一条复杂的SQL语句;
                嵌套结果SQL语句编写比较复杂;

虽然使用嵌套查询的方式比较简单,但是嵌套查询的方式要执行多条SQL语句,这对于大型数据集合和列表展示不是很好,
因为这样可能会导致成百上千条关联的SQL语句被执行,从而极大的消耗数据库性能并且会降低查询效率。
   

       使用MyBatis的延迟加载在一定程度上可以降低运行消耗并提高查询效率。MyBatis默认没有开启延迟加载,需要在核心配置文件中的<settings>元素内进行配置,
         具体配置方式如下:

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

mybatis.xml配置延迟加载 

<settings>
     <!-- 打开延迟加载的开关 -->  
    <setting name="lazyLoadingEnabled" value="true" />  
    <!-- 将积极加载改为消息加载,即按需加载 -->  
    <setting name="aggressiveLazyLoading" value="false"/>  
	</settings>

在映射文件中,<association>元素和<collection>元素中都已默认配置了延迟加载属性,即默认属性fetchType="lazy"(属性fetchType="eager"表示立即加载),所以在配置文件中开启延迟加载后,无需在映射文件中再做配置。
 


 

一对多

MyBatis就是通过<collection>元素来处理一对多关联关系

<collection>子元素的属性大部分与<association>元素相同,但其还包含一个特殊属性--ofType 。
        ofType   ofType属性与javaType属性对应,它用于指定实体对象中集合类属性所包含的元素类型。

 

多对多

        在数据库中,多对多的关联关系通常使用一个中间表来维护,中间表中的订单id作为外键参照订单表的id,商品id作为外键参照商品表的id

       在MyBatis中,多对多的关联关系查询,同样可以使用前面介绍的<collection >元素进行处理(其用法和一对多关联关系查询语句用法基本相同)。
 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员路同学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值