解决 MyBatis Plus 自动生成的过长 ID 问题并重新设置数据库自增长ID的起始值

问题描述

在使用 MyBatis Plus 进行开发时,自动生成的 ID 过长可能导致数据库性能下降、索引冗长等问题。因此,需要解决这个问题。

在某种情况下,当使用 MyBatis Plus 自动生成的 ID 过长时,可能导致其他接口无法按照 int 类型查询数据,因为数据库中设计为 bigint 类型,纯了 19 位数字。为解决这个问题,一种简单的方法是使用数据库的自增长主键来替代 MyBatis Plus 自动生成的 ID,避免生成过长的 ID。

另外,当在 MySQL 数据库中使用了自增长类型的 ID,并删除了部分数据后,可能需要重新设置自增长 ID 的起始值。以下是两种重置自增长 ID 的方法的详细步骤。

方法1:使用 ALTER TABLE 命令

首先确认要重置自增长 ID 的表名,例如表名为 base_user

执行以下 SQL 语句获取表中的最大 ID 值:

1
2
3
4
SELECT MAX(id) FROM base_user;
将最大 ID 值加1,并执行以下 SQL 语句重置自增长 ID,假设最大 ID 值为 2000
ALTER TABLE base_user AUTO_INCREMENT = 2001;
这样,以后插入数据时,自增长 ID 将从 2001 开始递增。

方法2:使用 TRUNCATE TABLE 命令
首先确认要重置自增长 ID 的表名,例如表名为 base_user。

1
2
3
执行以下 SQL 语句来清空表并重置自增长 ID(注意:该命令会删除表中的所有数据,请确保已备份重要数据):
TRUNCATE TABLE base_user;
TRUNCATE TABLE 命令将删除表中的所有数据,并重新创建表,自动将自增长 ID 重置为 1 开始。

注意:在生产环境中,请谨慎使用重置自增长 ID 的方法,以确保数据的完整性和一致性。

使用数据库自增长主键的解决方案
为了解决 MyBatis Plus 自动生成的过长 ID 问题,可以使用数据库的自增长主键来替代 MyBatis Plus 自动生成的 ID,从而生成相对较短的 ID。

解决方案步骤
在实体类的 ID 字段上添加 @TableId(type = IdType.AUTO) 注解,指定使用数据库的自增长主键。示例代码如下:

1
2
3
4
5
6
7
8
9
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

public class YourEntity {
@TableId(type = IdType.AUTO)
private Long id;

// 其他字段
}

在数据库中创建相应的表,并将 ID 字段设置为自增长(一般使用 AUTO_INCREMENT 或类似方法实现)。示例 SQL 代码如下:
1
2
3
4
CREATE TABLE your_table (
id bigint AUTO_INCREMENT PRIMARY KEY,
-- 其他字段
);

这样,MyBatis Plus 将使用数据库自增长主键来生成 ID,避免了生成过长的 ID。

请注意,这种简化的解决方案依赖于数据库的自增长主键功能,所以请确保数据库表的设置是支持自增长主键的。

总结
通过使用数据库的自增长主键来替代 MyBatis Plus 自动生成的过长 ID,可以提高数据库性能和索引效率。这是一个简单而有效的解决方案。

希望这个文档对你有帮助!