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='基础信息表';

总结

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

相关文章

  • 浅谈Java 类中各成分加载顺序和内存中的存放位置

    浅谈Java 类中各成分加载顺序和内存中的存放位置

    下面小编就为大家带来一篇浅谈Java 类中各成分加载顺序和内存中的存放位置。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • SpringBoot使用classfinal-maven-plugin插件加密Jar包的示例代码

    SpringBoot使用classfinal-maven-plugin插件加密Jar包的示例代码

    这篇文章给大家介绍了SpringBoot使用classfinal-maven-plugin插件加密Jar包的实例,文中通过代码示例和图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • Spring Validator从零掌握对象校验的详细过程

    Spring Validator从零掌握对象校验的详细过程

    SpringValidator学习指南从零掌握对象校验,涵盖Validator接口、嵌套对象处理、错误代码解析等核心概念,帮助开发者实现数据校验的规范与高效,本文详细介绍Spring Validator从零掌握对象校验,感兴趣的朋友一起看看吧
    2025-02-02
  • SpringBoot使用log4j2将日志记录到文件及自定义数据库的配置方法

    SpringBoot使用log4j2将日志记录到文件及自定义数据库的配置方法

    这篇文章主要介绍了SpringBoot使用log4j2将日志记录到文件及自定义数据库的配置方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03
  • 图文示例详解Lucene数据模型查询原理

    图文示例详解Lucene数据模型查询原理

    这篇文章主要为大家通过图文示例详解Lucene数据模型查询原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 详解Spring Cloud Consul 实现服务注册和发现

    详解Spring Cloud Consul 实现服务注册和发现

    这篇文章主要介绍了Spring Cloud Consul 实现服务注册和发现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 浅谈Java中父类与子类的加载顺序详解

    浅谈Java中父类与子类的加载顺序详解

    本篇文章是对Java中父类与子类的加载顺序进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Java之synchronized(含与ReentrantLock的区别解读)

    Java之synchronized(含与ReentrantLock的区别解读)

    文章主要介绍了`synchronized`和`ReentrantLock`的区别,包括它们的实现原理、公平性、灵活性、可中断性等方面,同时,文章详细解释了`synchronized`的使用方法,包括修饰实例方法、静态方法和代码块的情况,以及如何分析代码是否互斥和可重入性
    2025-01-01
  • 生产环境jvm常用的参数设置建议分享

    生产环境jvm常用的参数设置建议分享

    在Java应用程序的部署过程中,合理配置JVM(Java虚拟机)参数对于提升应用性能、稳定性和资源利用效率至关重要,本文将探讨一些常用的JVM参数设置建议,帮助开发者在生产环境中优化Java应用,需要的朋友可以参考下
    2025-04-04
  • mybatis快速上手并运行程序

    mybatis快速上手并运行程序

    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO为数据库中的记录
    2022-01-01

最新评论