千家信息网

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

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要介绍如何解决mybatis-plus执行insert()后实体的id自动更新问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mybatis-plus 执行inse
千家信息网最后更新 2025年01月31日如何解决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安全错误 数据库的锁怎样保障安全 栖霞游戏软件开发公司电话 本科论文会上知网数据库吗 路由器的虚拟服务器有什么用 网络安全互动小游戏 xmpp搭载的数据库 上海多知互联网科技 多税号税控服务器是什么意思 联想万全R520服务器不开机 服务器硬盘检测 杭州商城软件开发哪里好 网络安全单位有哪些 服务器404找不到文件怎么办 数据库中qts是什么意思 数据库如何进行时间段查询 服务器安全的系统设计 csgo 我的服务器申请要多久 网络安全事件分为哪些级别 幼儿园网络安全进课堂教案大班 数据库系统一般不包括数据库 图数据库 存储 日历下载软件开发 网络安全宣传周前期工作 网络安全企业名单 5分钟网络安全ppt 计算机网络技术与实现论文 数据库的端口是用来干什么的 sql服务器上删除实例 人间地狱游戏怎么增加服务器 元吉互联网科技 我的世界服务器怎么开网易版免费
0