Mybatis-plus插入数据遇到主键没有默认值的情况

 更新时间:2023年11月03日 15:24:05   作者:讓丄帝愛伱  
这篇文章主要介绍了Mybatis-plus插入数据遇到主键没有默认值的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Mybatis-plus插入数据遇到主键没默认值

新增数据时报

java.sql.SQLException: Field 'id' doesn't have a default value

mybatis-plus的insert方法,在底层会默认生成一个Long类型的UUID,这就导致跟数据库里面类型不一致,把数据库默认自增的主键给禁了

主键生成方式类型如下(IdType):

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

设置主键的生成方式

@TableId(value = "id",type = IdType.INPUT) // 主键手动输入

mybatis-plus插入数据时,关于id没有赋值,系统自动赋值,并报错Could not set property ‘id‘ of ‘***‘ with value

赶时间的同学可以直接看文章最后的结果

创建了一张表,表里面有id字段,但是并没有声明它为主键

对应java实体类为

然后开始inset,随便写个伪代码

User user = new User();
user.setId("");
user.setName("测试");
this.insert(user);

然后就报错了,一看报错信息是

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException:
Could not set property ‘id’ of 'class User ’ with value ‘1278867511785242626’
Cause: java.lang.IllegalArgumentException: argument type mismatch

what??

我并没有设置id啊,看着这有规则数字,很像是mybatis-plus自动生成的主键值

然后就翻了翻mybatis-plus的大致源码,找到idType类

看到mybatis-plus有这5中主键生成类型,一般对应我们数据库表中id的生成类型

比如我设置我得实体类id的生成类型为uuid

以上一般是我们的正常操作

现在的我不想在这个表中建立主键,我想插入数据的时候,先不塞id的值,我就是想写bug(🤭开玩笑啊),这样怎么弄呢

我不添加@TableId注解,不设置id的类型不行了吗,答案是不行的

如果你的实体类中有字段名定义为了“id”,mybatis-plus就默认你这个字段是主键,就算你不定义它的生成类型,mybatis-plus在自动装载的时候会帮你把id设置为默认类型,而默认的idType就是ID_WORKER,全局唯一

那好,我加上主键@TableId

既然我这个表没有主键,我也不想塞值进去,那我把实体里面的id类型设置为

@TableId(type = IdType.NONE)
	private String id;

这个行不行呢,答案还是是不行的,如下

找到TableInfoHelper 这个类,里面有初始化table的方法 initTableId

里面进行了判断,如果idType为NONE,还是会把id的类型设置成全局默认类型ID-WORKER

哈哈,由此可以看出mybatis-plus怕我们忘记设置主键id真是操碎了心啊

好了,上面5中id生成的类型只有input看着可以满足我们的需求了

这个顾名思义就是用户塞什么值就是什么值

我们把idType设置为

@TableId(type = IdType.INPUT)
private String id;

这样我们就可以随意的写入id任何值了,。

总结

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

相关文章

  • 第三方网站微信登录java代码实现

    第三方网站微信登录java代码实现

    这篇文章主要为大家详细介绍了第三方网站微信登录的java代码实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • MyBatis将查询出的两列数据装配成键值对的操作方法

    MyBatis将查询出的两列数据装配成键值对的操作方法

    这篇文章主要介绍了MyBatis将查询出的两列数据装配成键值对的操作代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 聊聊SpringMVC项目依赖和静态资源导出问题

    聊聊SpringMVC项目依赖和静态资源导出问题

    这篇文章主要介绍了SpringMVC项目依赖和静态资源导出问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 详解Java的Hibernate框架中的List映射表与Bag映射

    详解Java的Hibernate框架中的List映射表与Bag映射

    这篇文章主要介绍了Java的Hibernate框架中的List映射表与Bag映射,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-12-12
  • springboot内置的tomcat支持最大的并发量问题

    springboot内置的tomcat支持最大的并发量问题

    这篇文章主要介绍了springboot内置的tomcat支持最大的并发量问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • logback关闭某个包的日志操作

    logback关闭某个包的日志操作

    这篇文章主要介绍了logback关闭某个包的日志操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • JVM知识总结之垃圾收集算法

    JVM知识总结之垃圾收集算法

    本博客为读书笔记,读的是《深入理解Java虚拟机》一书,在看这个书的时候,最大的一个感受便是“当初怎么就没有好好学习操作系统呢,不然也不会有这么多看的云里雾里的地方了”,不过那都是过去的事了,学习最好的时刻便是现在,需要的朋友可以参考下
    2021-06-06
  • MyBatis动态标签详解与应用实践举例

    MyBatis动态标签详解与应用实践举例

    MyBatis的动态SQL功能通过一组强大的标签实现,使得根据业务条件构建灵活SQL查询变得简单高效,这些标签基于OGNL表达式,能够智能生成SQL,避免了手动拼接SQL的复杂性和风险,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • SpringBoot 集成 Hera的过程(让日志查看从 "找罪证”"变 "查答案")

    SpringBoot 集成 Hera的过程(让日志查看从 "找罪证”"变 "查答案

    本文详细介绍了SpringBoot集成Hera日志平台的完整流程,主要包括Hera的核心价值、架构设计、实战落地、架构师进阶、避坑指南和总结,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • Mybatis-plus分页查询不生效问题排查全过程

    Mybatis-plus分页查询不生效问题排查全过程

    最近写分页的时候,遇到了分页无法正常发挥作用的问题,下面这篇文章主要给大家介绍了关于Mybatis-plus分页查询不生效问题排查的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03

最新评论