饭娱咖啡 2019-04-22 23:59:32 浏览 98 评论 0
java
JSON
数据库
Image
两张表
树形结构
主键自增
摘要: 场景 当需要将两张不同表的数据进行合并处理, 并且两张表的主键均为自增, 主键同是数字. 这时候需要区分的, 不同的表进行取值, 可以使其中一张表的主键为负数, 即 - 1,-2,-3. 当需要把取出来的两张表分别再存进数据库时, 要将之前取值是负数的主键转为正数, 而转为正数的方式也很简单, 也就是负负得正, 即 (-(...
场景
当需要将两张不同表的数据进行合并处理, 并且两张表的主键均为自增, 主键同是数字. 这时候需要区分的, 不同的表进行取值, 可以使其中一张表的主键为负数, 即 - 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
如果文章有帮助到了你, 欢迎点赞, 转发.
如果文章有错误的地方, 欢迎留言交流.
来源: https://yq.aliyun.com/articles/699412