Mybatis之Collectin标签多层嵌套使用
一、前言
关于该篇文章,主要是通过例子展示,当编写mybatis的xml文件中,出现需要使用嵌套Collection标签时候的有效写法,以此分享给大家,同时也是作为自己在业务开发中问题解决的记录
二、原数据格式及目标数据格式映射
根据业务需求,我们的数据查询结果如下:
f_id | parent_name | child_name | 其他字段 |
1 | xx | xx_c_1 | ... |
1 | xx | xx_c_2 | ... |
1 | test | test_c_1 | ... |
1 | test | test_c_2 | ... |
1 | pt | pt_c_1 | ... |
1 | hh | null | ... |
我们希望将查询结果映射出来的对象格式(通过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作为结果返回映射即可