Mybatis递归查询树型目录

可参考链接:https://blog.csdn.net/lianzhang861/article/details/86243532

  • 效果图
    在这里插入图片描述
  • 数据库表
    在这里插入图片描述
  • 自定义数据返回值类型
<!-- 自定义返回值类型 -->
<resultMap id="user_group_dto" type="org.hzero.iam.api.controller.v1.dto.UserGroupDTO">
        <id column="user_group_id" property="userGroupId" javaType="java.lang.Long"/>
        <result column="group_code" property="groupCode"/>
        <result column="group_name" property="groupName"/>
        <result column="remark" property="remark"/>
        <result column="enabled_flag" property="enabledFlag"/>
        <result column="tenant_id" property="tenantId"/>
        <result column="group_level" property="groupLevel"/>
        <result column="level_path" property="levelPath"/>
        <result column="order_seq" property="orderSeq"/>
        <!-- 父目录下嵌套子目录,user_group_id用于递归查询 -->
        <collection column="user_group_id" property="children"
                    ofType="org.hzero.iam.api.controller.v1.dto.UserGroupDTO"
                    select="org.hzero.iam.infra.mapper.IamUserGroupMapper.selectChildUserGroup">
        </collection>
    </resultMap>
  • sql查询
<!-- 第一次查询,查询的是所有一级目录 -->
<select id="selectUserGroupByGroupLevel" parameterType="entity.UserGroup" resultMap="user_group_dto">
    SELECT
        hug.user_group_id,
        hug.group_code,
        hug.group_name,
        hug.enabled_flag,
        hug.tenant_id,
        hug.remark,
        ht.tenant_name,            
        hug.group_level,
        hug.level_path,
        hug.order_seq,
        hug.parent_group_id
    FROM hiam_user_group hug
    LEFT JOIN hpfm_tenant ht ON hug.tenant_id = ht.tenant_id
    <where>
        hug.group_level = #{groupLevel}
        <if test="userGroupId != null">
            AND hug.user_group_id = #{userGroupId}
        </if>
        
    </where>
    ORDER BY hug.creation_date DESC
</select>

<!-- 子查询,查询一级目录下的子目录 -->
<!-- 返回值类型和父查询返回值类型一致,可以不断进行递归查询 -->
<select id="selectChildUserGroup" resultMap="user_group_dto">
    select
        hug.user_group_id,
        hug.group_code,
        hug.group_name,
        hug.enabled_flag,
        hug.tenant_id,
        hug.remark,
        ht.tenant_name,
        
        hug.group_level,
        hug.level_path,
        hug.order_seq,
        hug.parent_group_id
    FROM hiam_user_group hug
    LEFT JOIN hpfm_tenant ht ON hug.tenant_id = ht.tenant_id
    <where>
    	<!-- 子查询中,父目录id,parent_group_id等于从上次父查询中查出来的id-user_group_id -->
        parent_group_id = #{userGroupId}          
    </where>
</select>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值