博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 中两张表主键自增时,Java 后端组成树形结构的解决办法 ...
阅读量:7206 次
发布时间:2019-06-29

本文共 1523 字,大约阅读时间需要 5 分钟。

场景

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

转载地址:http://kedum.baihongyu.com/

你可能感兴趣的文章
【python】python抓取activemq管理界面
查看>>
python django 之 django自带的分页
查看>>
获取URL的参数
查看>>
PHP学习笔记----IIS7下安装配置php环境
查看>>
Spring系列之Alias标签的解析与使用
查看>>
SQA计划和系统测试规程
查看>>
[bzoj 5332][SDOI2018]旧试题
查看>>
Degrees of Freedom
查看>>
自定义注解与MYSQL
查看>>
thymeleaf中的日期格式化
查看>>
Cloud Foundry 部署应用绑定多个url的方法
查看>>
南京邮电大学java程序设计作业在线编程第八次作业
查看>>
学习笔记之Kubernetes
查看>>
sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
查看>>
Linux getcwd()的实现【转】
查看>>
《Objective-c》-(内存管理之二:多对象的内存管理)
查看>>
深入理解[观察者模式]原理与技术
查看>>
我的2017
查看>>
Xcode设置项之Architectures和Valid Architectures
查看>>
八皇后
查看>>