mybatis 返回结果里面嵌套list

flydoging 2020-06-10

前言:

之前一直习惯用mybatisPlus,表结构也都比较简单,mybatisPlus对单表的CRUD 比较友好,今年新换了一家公司,业务场景相对复杂,需要跨表跨库查询数据,故,毕业两年,刚开始接触手写sql,话不多说,先介绍今天的主题:很多时候,在查询数据库的时候。经常会出现以下的情况:

mybatis 返回结果里面嵌套list

 我们需要获取到combo_id 所对应的所有的sign_sugject_id,此时,就可以在mybatis的返回结果中嵌套一个list来处理sign_sugject_id。

具体代码如下:

1. 实体类代码:

public class XXX{

    private Long id;
    private String comName;
    private int companyType;

    public int getCompanyType() {
        return companyType;
    }

    public void setCompanyType(int companyType) {
        this.companyType = companyType;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getComName() {
        return comName;
    }

    public void setComName(String comName) {
        this.comName = comName;
    }
}

public class YYY{

    private String title;
    private List<XXX> signSubject;
}

2.mapper.xml 文件

<resultMap id="result" type="YYY">
    <result property="name" column="name"/>
    <collection property="signSubject" ofType="XXX">
      <id property="id" column="id"/>
      <result property="comName" column="com_name"/>
      <result property="companyType" column="company_type"/>
    </collection>
  </resultMap>

  <select id="test" resultMap="result">
   select a.name, c.id, c.com_name,b.company_type
   a
   left join  b on a.id = b.combo_id
   left join  c on b.sign_subject_id = c.id
    where a.id = 109
   </select>

分析:

注意<collection></collection>标签中的内容,其中的<id>的取值就是我们需要分组的combo_id,<result>标签中的内容,和XXX实体类的参数名一一对应。

相关推荐