Mybatis的关联查询映射

1. 介绍:关联查询字面意思上就是多表之间的查询,单表操作是最简单的,多表操作才是业务所需要的,那么查出来的字段怎么封装呢?

2. mybatis在这方面提供了很大的便利,通过三个标签便可以完成,resultMap、collection和association便是今天的猪脚

  先对这几个标签做一下介绍

  2.1 resultMap :

    id —— 我们调用的标识

    type —— 映射的类

  2.2 collection :(resultMap中包含的集合字段,一对多)

    column —— 数据库的字段

    ofType —— 映射的类

    property —— 映射的字段

    select —— 我们调用的mapper方法

  2.3 association : (resultMap中包含的单条对应数据,一对一)

    column —— 数据库的字段

    javaType —— 映射的类

    property —— 映射的字段

    select —— 我们调用的mapper方法

  在很久很久以前我们通常这样来进行关联查询映射,

<resultMap id="AllottedItemDTO" type="com.**.AllottedItemDTO">
    <id column="allottedHeaderId" property="allottedHeaderId"/>
    <collection property="allottedBoxItemDTOList" column="allottedHeaderId" ofType="com.**.AllottedBoxItemDTO" select="getAllottedBoxItem"/>
</resultMap>

  调用collection和assocaition时,我们需要传入column这个参数,而这个参数我们必须在resultMap中,用id或者property标签显示,

  其余字段mybatis会自动判断进行映射。接下来说一下另一种解决方案。

3. 上文中我们可能需要使用多条sql才可以完成相关映射,这次用一条语句来就查出关联数据。

  补充一下

  association : (如果多个类后缀相同,前缀不同,可以提取出一个合适的resultMap)

    resultMap —— 调用一个通用的结果集映射

    columnPrefix —— resultMap中column映射会添加前缀

  #下面的例子没有测试,但是大致是这样写的

select 
    a.id,a.name,a.sex,a.c_id,
    b.b_id,b.b_name,b.b_sex,
    c.c_id,c.c_name,c.c_sex 
from a 
    left join b on a.id = b.a_id 
    inner join c on a.c_id = c.a_id 
where a.id = #{id}

<resultMap id="a" type="A">
    <id column="id" property="id"/>
    <result column="c_id" property="cId"/>
    ...
    <collection column="b" ofType="B">
    ...
    </collection>
    <association column="c" javaType="C">
    ...
    </association>
</resultMap>

  mybatis会自动封装成我们想要的数据

原文地址:https://www.cnblogs.com/kongkongFabian/p/9522318.html