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;总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
