定长下自增ID的获取方式

定长下自增ID的获取方式
正常情况下,在开发菜单树的时候都会使用010 001 001 这样 三位代表一层的方式来表示该菜单的menuCode,
节点最大值为:999,一个节点下的子节点也不可能达到999,试想一下,如果节点下子节点太多,操作起来都不方便,
在新增的时候,会查询出最大的一位在加1,然后用加1 之后的值和最大值 999做比较,
如果小于999,怎么没问题,可以做id,大于在前台提示,不能在新增了,
这样看起来在逻辑上和实现上都没问题,

但是,这样看起来没问题的代码,存在一个很大的问题,
1、在生产上所有的数据不可能都是有代码生成的,也有是人为处理的数据,这样导致id不能像代码写那样查询出最大值再加1,(逻辑上递增),
2、可能是生产问题,在人为修复数据之后,可能会造成,递增跳跃的问题,例如566 567,590,
以上这两种情况都可能造成,在前台页面新增的数据没达到999条,但是在新增的时候查询出的max(code)已经是998了,这样就不能充分的使用到全部>999数字了,
逻辑优化:
弃用max(code),改用比较查询的方式,

思路:在查询的时候,查询出code的值,存放到list(map)中,得到list的总数total,
假如:total == 999 此时直接返回提示信息,
total < 999
遍历list,得到map,在从map中得到code。
将code。存放到新创建的alist中,
在定义一个for循环,最大值为999,和存放code的alist做包含判断,假如不包含,可以将不包含的的值存放到另一个新创建的blist中,
当for循环执行结束之后,blist中就存放的时,数据库code在999之间没有使用的数字,
此时,你可以随机从blist中取出一个值用作新的id,取第一个也没问题,
让后组装数据id,插入的数据库表,下次新增的时候,当程序跑完for循环之后,blist会少一个上一次取到的值,
实现代码如下:
实现原理

这种效果能比使用max(code)在加1更能充分的使用0~999之间的数值,

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值