千家信息网

如何解决mybatis-plus执行insert()后实体的id自动更新问题

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍如何解决mybatis-plus执行insert()后实体的id自动更新问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mybatis-plus 执行inse
千家信息网最后更新 2026年11月02日如何解决mybatis-plus执行insert()后实体的id自动更新问题

这篇文章主要介绍如何解决mybatis-plus执行insert()后实体的id自动更新问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

mybatis-plus 执行insert(),实体的id自动更新

mybatis-plus 在执行baseMapper.insert()的时候,会将传进去的实体的id自动更新为插入的主键值。

业务代码

@Transactional(rollbackFor = Exception.class)@Overridepublic String saveCourseInfo(CourseInfoForm courseInfoForm) {        //保存课程基本信息        Course course = new Course();        course.setStatus(Course.COURSE_DRAFT);        BeanUtils.copyProperties(courseInfoForm, course);        System.out.println("执行insert之前的id值:" + course.getId());        baseMapper.insert(course);        System.out.println("执行insert之后的id值:" + course.getId());        //保存课程详情信息        CourseDescription courseDescription = new CourseDescription();        courseDescription.setDescription(courseInfoForm.getDescription());        courseDescription.setId(course.getId());        courseDescriptionMapper.insert(courseDescription);        return course.getId();}

运行结果

执行insert之前的id值:null
Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6911ef9a]
JDBC Connection [HikariProxyConnection@2133325606 wrapping com.mysql.cj.jdbc.ConnectionImpl@5e4ceb08] will be managed by Spring
==> Preparing: INSERT INTO edu_course ( id, teacher_id, subject_id, subject_parent_id, title, price, lesson_num, cover, status, gmt_create, gmt_modified ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: 1417099738586558466(String), 1189426464967995393(String), 1416677134608371713(String), 1416677134537068547(String), Linux操作系统(String), 199(BigDecimal), 32(Integer), https://guli-file1-wang.oss-cn-beijing.aliyuncs.com/cover/2021/07/19/c5c453cc-0cdb-4c01-a2fc-3973bfe295fa.jpg(String), Draft(String), 2021-07-19 20:31:20.777(Timestamp), 2021-07-19 20:31:20.777(Timestamp)
<== Updates: 1
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6911ef9a]
执行insert之后的id值:1417099738586558466

所以说,在业务需要存储信息到多个表并且记录的id是一一对应的时候,就可以利用这个特性。而没有必要去执行sql语句查询id值。

mybatis-plus的insert遇到的坑

添加时id值不存在异常

我在添加的时候,无缘无辜的给我报

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

如图:

后来了解到 使用 mybatis-plus的insert方法,在底层会默认生成一个Long类型的UUID,这就导致跟数据库里面类型不一致导致错误,我们首先要做的是要把这个默认自增的主键给禁了

在实体类 id上面加一个注解

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

这样即可

@Datapublic class JtbTransactionRecord extends Model implements Serializable{    private static final long serialVersionUID = 1L;    /**     * 交易主键     */    @TableId(value = "id",type = IdType.INPUT)    private String id;}

以上是"如何解决mybatis-plus执行insert()后实体的id自动更新问题"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

实体 更新 信息 时候 问题 业务 内容 篇文章 类型 课程 一致 必要 一一对应 操作系统 代码 价值 兴趣 多个 小伙 小伙伴 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与科技发展 伴你行互联网科技有限公司 兼蜜互联网科技 互联网科技公司介绍 太原新华互联网科技学校怎么样 须眉科技是互联网公司吗 中国互联网有什么科技含量 上海宁丞科技互联网 允成互联网科技有限公司融资 内蒙古九一互联网科技 企晟互联网信息科技有限公司 济南有互联网科技公司吗 每天都有哪些好的互联网科技 宇信科技在杭州互联网排第几 风投北京互联网科技 云南互联网科技学费 山东蛋芒互联网科技有限公司 互联网科技大佬云集 互联网科技自媒体灵感 银川新华互联网科技学校招聘 上海睿民互联网科技有限公司 互联网科技垄断 与互联网科技公司 互联网 科技创新 万易互联网科技有限公司 上海亿帐通互联网科技 互联网养老 桔豆科技 中国最先进互联网科技公司 杭州壁岐互联网科技有限公司 上海旺乐尼互联网科技有限公司
0