ORM框架之Mybatis(四):映射文件resultMap标签详解

本文详细介绍了Mybatis的resultMap标签,特别是association、collection和discriminator子标签。association用于一对一查询,collection用于一对多查询,discriminator则用于根据不同条件执行不同关联查询。文中通过实例讲解了嵌套结果和嵌套查询两种方式,并讨论了关联查询在大数据量时的性能问题。此外,还强调了resultMap的重要性,尤其是解耦合的特性。
摘要由CSDN通过智能技术生成

Mybatis的映射文件中顶级的标签并不多,之前有说过select、update、delete、insert、sql等标签,resultMap在之前的文章也有提过,但是当时也是简单的提过,其实这个标签里面的内容很多,可简单可复杂。正常开发中简单的基本都在使用,但是涉及到复杂的用的就少啦。

association实现一对一的查询,collection实现一对多的查询,discriminator实现鉴别器的功能,也就是根据不同的条件实现不同的关联查询。为什么说用到这些复杂的内容很少呢。以前在项目上性能要求不是很高,对分库分表概念没有那么高的时候,采用关联查询其实没有什么不好,但是现在互联网发展迅速,数据量变得庞大,查询SQL的性能要求也变得更高。关联查询在大数据量的时候执行效率不高也就格外的凸显出来了。如果看过阿里的Java开发手册可以知道,他们是不推荐关联查询,而是提倡单表操作,如果需要查其他表信息,就根据条件,操作其他单表。

虽然关联查询操作变少,但是面试的时候还是可以用来问的。不管从哪一个方面来说扩展知识面都不是坏事。

resultMap子标签之association标签

在说association标签的具体使用前,先说一下两种关联查询方式。

  • 嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
  • 嵌套查询:通过执行另外一个 SQL 映射语句来返回预期的复杂类型

咋一看上面的两个概念很难理解,下面用代码体现一下。

嵌套结果方式

//用户类
public class User{
    private Integer id;
    private String user_name;
    private String phone;
    private String email;
    private Father father;
}
//父亲类
public class Father{
    private Integer id;
    private String name;
    private Integer age;
}
<!--用户表基础字段的映射关系-->
<resultMap id="userBaseColumnMap" type="com.zdydoit.core.model.User">
    <id property="id" column="id"/>
    <result property="userName" column="user_name"/>
    <result property="phone" column="phone"/>
    <result property="email" column="email"/>
</resultMap>
<!-- 嵌套结果方式 -->
<resultMap id="selectUserMap1" extends="userBaseColumnMap" type="com.zdydoit.core.model.User">
    <association property="father" javaType="com.zdydoit.core.model.Father" columnPrefix="tf_">
        <id property="id" column="id"/>
        <result property="name&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值