场景
当需要将两张不同表的数据进行合并处理,并且两张表的主键均为自增,主键同是数字。这时候需要区分的、不同的表进行取值,可以使其中一张表的主键为负数,即-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
如果文章有帮助到了你,欢迎点赞、转发。
如果文章有错误的地方,欢迎留言交流。