java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Mybatis-Plus自动生成id

Mybatis-Plus自动生成id涉及的问题解决过程

作者:qq_50893488

文章主要讲述了解决用户ID在页面和数据库中不一致的问题,并提供了两种解决方案:将主键类型改为String或删除数据库表重新创建以清空最大id

起因

一开始我发现我页面和数据库中用户id不一致,导致我通过id删除用户操作时,找不到对应id,结果导致删除不了。

如下图:

解决过程

① 我第一想到的办法就是能不能把生成的id变的短而简单,比如1,2,3,4... 这样就不会让页面和数据库的id不一致。

于是我就给实体类主键添加@TableId(value="id",type=IdType.AUTO) 注解,

让主键id不使用雪花算法生成id,用数据库自增id的形式生成id(此时如果你数据库id并没有设置为自增,那就会报错!

PS: 很多人添加了上图注解后,添加User后仍然发现生成的id是19位的数字,其实并不是因为这个@TableId没生效,而是因为数据库保留了之前雪花算法id的最大值,从此以后就以这个最大值为基础进行自增。

还有,如果你简单的以为把数据库表中原先19位的用户id全部改为1,2,3,4....等短而简单的数字作为id,配合@TableId注解,想着添加新的User的时候生成的 id 就不会是19位的数字了,但结果依旧为19位的数字,还是那句话数据库保留了之前雪花算法id的最大值,从此以后就以这个最大值为基础进行自增。

看来只有我把数据库的表删了,重新建表,这样让数据库由于id自增保留的最大id清空,最终发现添加新User就变成了1,2,3,4......成功解决!!!

②还有个办法就是把User的id改成String类型,这样也能让前端JS和后端的id一致。

或者在项目中都是将注解标注在对应字段上,在Json序列化的时候把Long自动转为String。

    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文