mybatis plus新增(insert)数据获取主键id的问题

 更新时间:2023年03月06日 08:48:46   作者:Rookie_cc  
这篇文章主要介绍了mybatis plus新增(insert)数据获取主键id的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mybatis plus新增(insert)数据获取主键id

在我们执行insert操作的时候,往往会需要拿到新插入数据的主键id做下一步操作。

例:

//新增银行卡
BankCard bankCard = new BankCard();
bankCard.setBankCardRealName(bankCardRequest.getRealName());
bankCard.setBankCardNum(bankCardRequest.getBankCardNum());
bankCard.setBankName(bankCardRequest.getBankName());
int index = bankCardMapper.insert(bankCard);

这里insert之后返回的index实际是你增加的数据列数,并不是主键id。

要想获取主键id,只需要在insert之后直接get该对象的主键id即可

例:

//新增银行卡
BankCard bankCard = new BankCard();
bankCard.setBankCardRealName(bankCardRequest.getRealName());
bankCard.setBankCardNum(bankCardRequest.getBankCardNum());
bankCard.setBankName(bankCardRequest.getBankName());
bankCardMapper.insert(bankCard);
Long id = bankCard.getId();

mybatis plus坑之insert方法

有天早上我的一个同事,突然跑来告诉我。我们某张表的自增ID变得很大。类似1173776258468638722 这种。这个当然是不能接受的啊。

着手解决

然后就开始找问题的原因,一开始我想的是数据库上的问题,我删掉不合理的数据,

alter table *** AUTO_INCREMENT=20,修改自增ID从20开始。手动插入数据,居然OK。

那就说明,可能是我们代码insert数据的时候存在的问题。我找到数据库访问层的insert语句处,发现使用的是mybatis-plus,网上查了一下关于这块的东西,发现insert方法在配置的时候,可以指定自增ID的方式。

源码中定义有以下几种:

public enum IdType {
    AUTO(0, "数据库ID自增"),
    INPUT(1, "用户输入ID"),
    ID_WORKER(2, "全局唯一ID"),
    UUID(3, "全局唯一ID"),
    NONE(4, "该类型为未设置主键类型"),
    ID_WORKER_STR(5, "字符串全局唯一ID");

然后我就果断手动配置了一下,

@TableId(type = IdType.AUTO)
private Long userId;

重启测试,OK。

也是很奇怪为什么之前的那部分数据的自增ID都是没问题的,突然出现这个,也是很困惑

出现这个问题的原因,还是因为自己技术不熟练啦~~

总结

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

相关文章

  • Java+MySQL实现图书管理系统(完整代码)

    Java+MySQL实现图书管理系统(完整代码)

    这篇文章主要介绍了Java+MySQL实现图书管理系统(完整代码),本文给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • JAVA实现线程的三种方法

    JAVA实现线程的三种方法

    这篇文章介绍了JAVA实现线程的三种方法,有需要的朋友可以参考一下
    2013-09-09
  • Monaco Editor实现sql和java代码提示实现示例

    Monaco Editor实现sql和java代码提示实现示例

    这篇文章主要为大家介绍了Monaco Editor代码提示sql和java实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Spring温故而知新系列教程之AOP代理

    Spring温故而知新系列教程之AOP代理

    Spring AOP 是代理模式的应用,可以使用JDK提供的Proxy类或通过字节码增强来实现。下面这篇文章主要给大家介绍了关于Spring之AOP代理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-05-05
  • SpringBoot打包发布到linux上(centos 7)的步骤

    SpringBoot打包发布到linux上(centos 7)的步骤

    这篇文章主要介绍了SpringBoot打包发布到linux上(centos 7)的步骤,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-12-12
  • Java 重入锁和读写锁的具体使用

    Java 重入锁和读写锁的具体使用

    这篇文章主要介绍了Java 重入锁和读写锁的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • JavaBean四个作用域范围的详解

    JavaBean四个作用域范围的详解

    这篇文章主要介绍了JavaBean四个作用域范围的详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10
  • 解决Maven中关于依赖导入不进的问题

    解决Maven中关于依赖导入不进的问题

    这篇文章主要介绍了解决Maven中关于依赖导入不进的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • java数据类型转换陷阱包括列表陷阱

    java数据类型转换陷阱包括列表陷阱

    这篇文章主要介绍了java数据类型转换的一些陷阱,包括基本数据类型转换列表陷阱,基本上这一篇就把常见的问题就给大家分享一下
    2020-10-10
  • Spring标准的xml文件头实例分析

    Spring标准的xml文件头实例分析

    这篇文章主要介绍了Spring标准的xml文件头实例分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11

最新评论