树数据获取当前id下所有的子id信息

树数据获取当前id下所有的子id信息

sql的写法(自定义函数)

这里使用的是MySQL

自定义函数

CREATE FUNCTION `函数名`(rootId INT)
RETURNS VARCHAR(500)
BEGIN
DECLARE sTemp VARCHAR(500);
DECLARE sTempChd  VARCHAR(500);
SET sTemp = '';
SET sTempChd =CAST(rootId AS CHAR);
WHILE sTempChd IS NOT NULL DO
SET sTemp = CONCAT(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(id) INTO sTempChd FROM 表名 WHERE FIND_IN_SET(parent_id,sTempChd)>0;
END WHILE;
RETURN sTemp;
END

查询测试

select SUBSTRING(函数名(id),2)

这里解释一下为什么这样写?

id 为当前id 即你要查询所有子id的当前id

2 是因为查询结果中会默认拼接一个空的字符串和","

mapper写法

就仿照上边的sql去查询就可以了 把id动态传入即可

处理

因为我们查出来的是一个字符串 不能直接使用

所以这里我给转换成了int类型的集合

首先拿到sql查询出来的字符串(这里我用str表示)

//切割
String[] str1 = str.split(",");
//转int数组
int[] array = Arrays.stream(str1).mapToInt(Integer::parseInt).toArray();
//转int集合
List<Integer> list2 = Arrays.stream(array).boxed().collect(Collectors.toList());

这里之所以要转换成int类型的集合是因为后续查询对应信息

在做查询之前一定要给实体类加上一个字段(字段类型为List<Integer>)

    <select id="查询语句id" parameterType="实体类" resultMap="返回结果集">
      <!--查询sql-->
        <where>
         <!--模糊匹配-->
        <if test="实体类字段 != null  and 实体类字段 != ''"> and 对应数据库字段 like concat('%', #{传入值}, '%')</if>
       <!--其它省略-->
        <if test="实体类定义的list字段.size>0">
             and 子id in
                <foreach collection="实体类定义的list字段" index="index" item="item" open="("
                         separator="," close=")">
                    #{实体类定义的list字段[${index}]}
                </foreach>
        </if>
    </where>

这样就可以得到当前id下所有的子id数据!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值