Mybatis-plus中Save()方法的注意点

首先我们先看一段代码

复制代码
Project project = new Project();
// 赋值主阶段数据 stagesid=0
project.setId(getId());
project.setStagesid(0);
project.setName("Java项目实战");
this.save(project);

// 重新赋值阶段1数据 stagesid=1
project.setId(getId()); // 覆盖了之前的ID
project.setStagesid(1); // 覆盖了之前的stagesid
project.setName("需求分析及设计");
this.save(project);

// 重新赋值阶段2数据 stagesid=2
project.setId(getId());
project.setStagesid(2);
project.setName("论文及成果展示");
this.save(project);

这段代码存在严重的问题:

Java 中,对象是引用类型 ,不是值类型。如果你的代码这么写:看似调用了 3 次save(),但因为是同一个对象引用 ,每次setXxx()都是在修改同一个对象的属性值

当然即使引用的是同一个对象每次都会执行save方法,那么对数据库的插入操作中就会依次插入同一个对象的不同值。不会存在只插入最新一条数据的情况。不过如果加上事务就会出现严重的问题。

事务中save方法不会立即执行 如果通过事务来进行管理的话,在执行完整段代码后会统一插入三条数据到数据库中,此时此刻插入的数据都将是最新的数据。造成严重的错误。

建议创建多个实例来进行数据插入操作。

相关推荐
敲代码的嘎仔5 小时前
Java后端面试——SSM框架面试题
java·面试·职场和发展·mybatis·ssm·springboot·八股
ruanyongjing5 小时前
SpringBoot3 整合 Mybatis 完整版
mybatis
小江的记录本9 小时前
【MyBatis-Plus】Spring Boot + MyBatis-Plus 进行各种数据库操作(附完整 CRUD 项目代码示例)
java·前端·数据库·spring boot·后端·sql·mybatis
小江的记录本11 小时前
【MyBatis-Plus】MyBatis-Plus的核心特性、条件构造器、分页插件、乐观锁插件
java·前端·spring boot·后端·sql·tomcat·mybatis
码界奇点13 小时前
基于Spring Boot和MyBatis的图书管理系统设计与实现
spring boot·后端·车载系统·毕业设计·mybatis·源代码管理
Javatutouhouduan14 小时前
SpringBoot如何快速精通?
java·spring boot·mybatis·java面试·后端开发·java编程·java程序员
稻草猫.17 小时前
MyBatis进阶:动态SQL与MyBatis Generator插件使用
java·数据库·后端·spring·mvc·mybatis
小王不爱笑1321 天前
MyBatis 执行流程源码级深度解析:从 Mapper 接口到 SQL 执行的全链路逻辑
数据库·sql·mybatis
弹简特1 天前
【JavaEE18-后端部分】 MyBatis 入门第二篇:使用注解完成增删改查(含有参数传递底层原理)
spring boot·mybatis
小王不爱笑1321 天前
SpringBoot 自动装配深度解析:从底层原理到自定义 starter 实战(含源码断点调试)
java·spring boot·mybatis