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

  • 相关阅读:
    svn提交时强制添加注释 (转)
    通过IIS调试ASP.NET项目
    当前标识(IIS APPPOOLDefaultWebSite)没有对“C:WindowsMicrosoft.NETFramework64v2.0.50727Temporary ASP.NET Files“的写访问权限
    (转)WPF控件开源资源
    redhat7系统安装kerberos报错
    centos7
    spark-sql与Hive元数据共享
    hive-llap配置
    spark-二次排序
    kylin3.1基于ambari2.7.5部署总结
  • 原文地址:https://www.cnblogs.com/zhenggc/p/13655492.html
Copyright © 2011-2022 走看看