mybatis-plus自带保存接口,主键Id不是从1开始问题及解决

 更新时间:2025年12月15日 08:43:42   作者:明湖起风了  
文章描述了在使用MyBatis-Plus的save方法保存数据时,遇到主键ID过大导致报错的问题,提出的解决方案包括使用@TableId注解让MyBatis-Plus使用数据库的自增模式,使用truncatetable方法重置表并备份数据,以及通过建表语句设置主键ID的初始值

问题描述

调用mybatis-plus自带的save相关保存接口,自动插入的主键Id非常大,导致数据很快超出范围报错。

解决方案1

在相应的bean实体类中对主键Id添加注解  @TableId(type = IdType.AUTO)  ,这样mybatis-plus就会忽略掉主键,转而用数据库自己的自增长模式。

	/**
	 * 非业务主键id
	 */
	@TableId(type = IdType.AUTO)
	private Integer id;

经过测试,添加了该注解后,我将测试表中的数据清理后,插入数据库的 id 还是很大,没有起作用。

解决方案2

风险情况:

使用 truncate table 方法属于重置数据库表,会将数据库表的内容全部删除,如果是新表创建,则可以使用。

如果需要兼容旧数据,一定要备份,一定要备份,一定要备份,通过备份数据进行重新插入,实现 id 自增。

truncate table 表名

执行完后,重新插入,id正确。 

解决方案3

还有一种可能就是,创建表的时候设置了主键id初始值:AUTO_INCREMENT=XXX,我们也可以通过建表语句进行设置:

CREATE TABLE `device` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `device_code` varchar(64) NOT NULL COMMENT '设备id',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `idx_device_code` (`device_code`,`del_flag`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='基础信息表';

总结

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

相关文章

  • SpringBoot JAR和WAR方式打包并部署的详细步骤及对比分析

    SpringBoot JAR和WAR方式打包并部署的详细步骤及对比分析

    无论选择JAR还是WAR部署方式,关键在于匹配团队的技术栈、运维能力和业务需求,Spring Boot的灵活性支持两种部署模式,为不同场景提供了合适的解决方案,本文给大家详细对比分析了这两种方式,需要的朋友可以参考下
    2026-01-01
  • Java中ArrayList的常见用法示例小结

    Java中ArrayList的常见用法示例小结

    本文介绍了Java的ArrayList,它是一个动态数组,可以自动调整大小,支持添加、删除、获取元素等操作,同时,还讨论了如何存储基本数据类型以及在多线程环境下的使用注意事项,感兴趣的朋友一起看看吧
    2025-02-02
  • Maven的常用命令总结大全

    Maven的常用命令总结大全

    这篇文章主要给大家介绍了Maven常用命令总结的相关资料,maven最大的作用就是用于对项目中jar包依赖的统一管理,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • 有关ThreadLocal的面试题你真的懂了吗

    有关ThreadLocal的面试题你真的懂了吗

    这篇文章主要介绍了面试题ThreadLocal,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • Java不带break将导致case穿透问题

    Java不带break将导致case穿透问题

    这篇文章主要介绍了Java不带break将导致case穿透问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Java中常用的6种排序算法详细分解

    Java中常用的6种排序算法详细分解

    这篇文章主要介绍了Java中常用的6种排序算法详细分解,着重说明每个算法的计算过程分解,是探究实现原理级的文章,对于深入理解这些算法有很大帮助,需要的朋友可以参考下
    2014-07-07
  • Java时区转换实例代码解析

    Java时区转换实例代码解析

    这篇文章主要介绍了Java时区转换实例代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • JPA配置方式+逆向工程映射到Entity实体类

    JPA配置方式+逆向工程映射到Entity实体类

    这篇文章主要介绍了JPA配置方式+逆向工程映射到Entity实体类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 使用Java将字符串在ISO-8859-1和UTF-8之间相互转换

    使用Java将字符串在ISO-8859-1和UTF-8之间相互转换

    大家都知道在一些情况下,我们需要特殊的编码格式,如:UTF-8,但是系统默认的编码为ISO-8859-1,遇到这个问题,该如何对字符串进行两个编码的转换呢,下面小编给大家分享下java中如何在ISO-8859-1和UTF-8之间相互转换,感兴趣的朋友一起看看吧
    2021-12-12
  • 浅析Java随机数与定时器

    浅析Java随机数与定时器

    本篇文章给大家分析了Java随机数与定时器的实现原理以及代码分享,有需要的读者参考下吧。
    2018-02-02

最新评论