解决mybatis-plus新增数据自增ID变无序问题
作者:某猿蚊常叮
这篇文章主要介绍了解决mybatis-plus新增数据自增ID变无序问题,具有很好的参考价值,希望对大家有所帮助。
mybatis-plus新增数据自增ID变无序
问题描述
在测试mybatis-plus时, 发现新增接口,新增出来的数据id变的巨长且无序, 经过查询,原来是实体类少了注解, 下面是未添加之前的
@Data public class User { private Integer id; private String username; // 忽略,不传到前端 @JsonIgnore private String password; private String nickname; private String email; private String phone; private String address; }
解决
这里需要在id上指定, 自增的设定: @TableId(value = "id", type = IdType.AUTO), 如下
@Data public class User { @TableId(value = "id", type = IdType.AUTO) private Integer id; private String username; // 忽略,不传到前端 @JsonIgnore private String password; private String nickname; private String email; private String phone; private String address; }
但下次新增的时候, id会从你最后一次新增的那个id开始自增, 所以我们的将mysql的id进行重置, 重置方法, 这里就采用比较简单的
1. 删除错误id数据
首先将之前新增的无序的id数据删除
2. alter table重置自增ID
例如:
DELETE FROM USER WHERE ID = 4;
使用 ALTER TABLE 重置自增 ID:
ALTER TABLE table_name AUTO_INCREMENT = value;
table_name
为当前要重置自增 ID 的表名。value
必须是大于当前表中最大 ID 数,本示例中当前表最大数为 2,我们可以设置成 3。
至此, 后面就可以愉快的写代码了
mybaits-plus新增数据明明没有输入id的值(id自增)却报错
mybaits-plus新增数据明明没有输入id的值(id自增)却报错???
新增数据
{ "name": "第二fff会议室", "isApprove": 1, "remarks": "第1会议室" }
报错信息
Data truncation: Out of range value for column 'id' at row 1
明明没有输入id的值
并且数据库表中已经设置了id为自增
百度资料,终于找到了原因
这里贴图展示原因:
mybatis-plus开启主键雪花策略,生成19位随机字符串,数据库中的主键字段为int类型,长度小于19位。解决:将数据库中表的主键字段设置为bigint类型
结果成功
{ "code": 201, "data": true, "message": "请求成功" }
MyBatisPlus自增id怎么设置成int自增呢?
使用 mybatis-plus的insert方法,在底层会默认生成一个Long类型的UUID,这就导致跟数据库里面类型不一致导致错误,我们首先要做的是要把这个默认自增的主键给禁了
1.在实体类 id上面加一个注解,并且实体类继承Model
@TableId(value = “id”,type = IdType.INPUT) private Integer id;
2.然后在重写这个方法
@Override protected Serializable pkVal() { return this.id; }
3.不要忘记了在数据库设计表中勾选自动增长,不然会报错:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。