zoukankan      html  css  js  c++  java
  • 两张不同的表数据组成树形结构的解决办法

    场景

    当需要将两张不同表的数据进行合并处理,并且两张表的主键均为自增,主键同是数字。这时候需要区分的、不同的表进行取值,可以使其中一张表的主键为负数,即-1,-2,-3。

    当需要把取出来的两张表分别再存进数据库时,要将之前取值是负数的主键转为正数,而转为正数的方式也很简单,也就是负负得正,即(-(-1)) = 1

    具体示例

    将系统表和菜单表的数据组合成树的形式,示例如下:

    [{
        id: 1,
        lable: 基础数据,
        parentId: null,
        children: [
            {
                id: 1,
                lable: 用户管理,
                parentId: 1,
                children: []
            },
            {
                id: 2,
                lable: 角色管理,
                parentId: 1,
                children: []
            }
        ]
    }]
    
    

    可以看到,lable 为基础数据 的 id 与 lable 为用户管理的 id 相同,都为 1 。这样的数据在前端显示树结构的时候,往往是会出问题的,因为前端框架显示树的时候,通常需要所给数据的 id 是唯一的。

    我也曾做过这样的尝试,将系统的 id 改为字符串,示例如下:

    [{
        id: baseData,
        lable: 基础数据,
        parentId: null,
        children: [
            {
                id: 1,
                lable: 用户管理,
                parentId: 1,
                children: []
            },
            {
                id: 2,
                lable: 角色管理,
                parentId: 1,
                children: []
            }
        ]
    }]
    
    

    但是,后端将数据组装成这种树形结构的时候,所有的 id 都可能被转为字符串。我就是因为都被转为字符串,所以才会有用负数这样的形式出现。

    解决办法

    一种解法,就是系统 id 用负数的形式,示例如下:

    [{
        id: -1,
        lable: 基础数据,
        parentId: null,
        children: [
            {
                id: 1,
                lable: 用户管理,
                parentId: 1,
                children: []
            },
            {
                id: 2,
                lable: 角色管理,
                parentId: 1,
                children: []
            }
        ]
    }]
    
    

    而当功能需要将系统和菜单的 id 再次保存到数据库时,后端可以将负数转为正数,所谓负负得正,即(-(-1)) = 1

    不相信的朋友,可以试试下面的代码:

        public static void main(String[] args) {
            int a = -1;
            System.out.println((-a) == 1);
        }
    

    打印的结果:true


    如果文章有帮助到了你,欢迎点赞、转发。

    如果文章有错误的地方,欢迎留言交流。

    image

  • 相关阅读:
    SharePoint 2010 列表在手机中设置每页显示的条数
    Web analytics unique visitors go sky high 网站分析报表,唯一IP地址用户
    SharePoint2010与Reporting Services集成方案
    luogu题解 P4171 【[JSOI2010]满汉全席】
    单调队列优化DP历险记
    20210128图论专场
    关于set和get,新手想不明白的事情
    和加载的对象之间进行通信例子
    程序设计中的(除。。。。之外,都怎么。。。)
    做个小测试来区分keyDown和keyUp事件
  • 原文地址:https://www.cnblogs.com/zhenggc/p/13655492.html
Copyright © 2011-2022 走看看