Mybatis之Collectin标签多层嵌套使用

一、前言

关于该篇文章,主要是通过例子展示,当编写mybatis的xml文件中,出现需要使用嵌套Collection标签时候的有效写法,以此分享给大家,同时也是作为自己在业务开发中问题解决的记录

二、原数据格式及目标数据格式映射

根据业务需求,我们的数据查询结果如下:

f_idparent_namechild_name其他字段
1xxxx_c_1        ...
1xxxx_c_2...
1testtest_c_1...
1testtest_c_2...
1ptpt_c_1...
1hhnull...

我们希望将查询结果映射出来的对象格式(通过json体现会比较形象)如下:

 {
   "id": 1,
    "names": [
      {
        "parentName": "xx",
        "childNames": ["xx_c_1", "xx_c_2"]
      },
      {
        "parentName": "test",
        "childNames": ["test_c_1", "test_c_2"]
      },
      {
        "parentName": "pt",
        "childNames": ["pt_c_1"]
      },
      {
        "parentName": "hh",
        "childNames": []
      }
    ]
}

接下来我们需要设计类

三、类创建

@Data
pulbic class ResultPO{
    
    private Integer fId;

    private List<NamePO> Names;
        
}
@Data
public class NamePO{

    private String parentName;

    private List<String> childNames;

}

接下来就是xml中的resultMap写法了

四、mybatis之resultMap设计

<resultMap id="myResultMap" type="xxx.ResultPO">
		<id column="f_id" jdbcType="NUMBER" property="fId" />
		<collection property="names" resultMap="nameMap"/>
</resultMap>

<resultMap id="nameMap" type="xxx.NamePO">
		<result column="parent_name" jdbcType="VARCHAR" property="parentMame"/>
		<collection property="childNames" resultMap="childNameMap"/>
</resultMap>

<resultMap id="childNameMap" type="string">
		<result column="child_name" jdbcType="VARCHAR"/>
</resultMap>

最后,我们直接使用myResultMap作为结果返回映射即可