MyBatis 一对多collection使用实例 :获取父级所有数据以及每个父级的所有子集数据

数据内容如下表:
parent字段数据对应id,如:10-流行 是 1-演唱会 的子类
在这里插入图片描述
需要获取的data格式如下:
在这里插入图片描述
如上图所示,获取每个level1的数据都要带有level1所有的子类数据

实现代码:
获取类如下:

public class DmItemTypeVo implements Serializable {
    //主键
    private Long id;
    //类型名称
    private String itemType;
    //分类级别;select;(1:1级,2:2级)
    private String level;
    //父级类型
    private Long parent;
    //类别别名
    private String aliasName;
    //页面模板类型
    private String key;
    //节目类型集合
    private List<DmItemType> children;
    //getset...
public class DmItemType implements Serializable {
    //主键
    private Long id;
    //类型名称
    private String itemType;
    //分类级别;select;(1:1级,2:2级)
    private String level;
    //父级类型
    private Long parent;
    //类别别名
    private String aliasName;
    //页面模板类型
    private String key;
    //getset...

myBatis代码如下:

<select id="queryAllItemType" resultMap="DmItemTypeMap">
        SELECT

        d1.id as d1_id,
        d1.itemType as itemType,
        d1.level as level,
        d1.parent as parent,
        d1.aliasName as aliasName
        from dm_item_type as d1 where d1.level = 1
</select>

<resultMap id="DmItemTypeMap" type="com.der.vo.DmItemTypeVo">
        <id property="id" column="d1_id"/>
        <result property="itemType" column="itemType"/>
        <result property="level" column="level"/>
        <result property="parent" column="parent"/>
        <result property="aliasName" column="aliasName"/>
        <collection property="children" ofType="com.kgc.pojo.DmItemType" column="d1_id" select="queryChildren"/>
</resultMap>

<select id="queryChildren" resultType="com.kgc.pojo.DmItemType">
    SELECT
    d2.id as id,
    d2.itemType as itemType,
    d2.level as level,
    d2.parent as parent,
    d2.aliasName as aliasName
    from dm_item_type as d2 where d2.parent = #{d1_id}
</select>

如上代码所示:先获取父类id,将父类id通过collection的方式代入查询子类的sql语句

public List<DmItemTypeVo> queryAllItemType()throws Exception;

最后直接调取即可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值