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

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

相关推荐
jaysee-sjc1 天前
【苍穹外卖】Day01:从零认识企业级项目开发
java·开发语言·数据库·mysql·spring·intellij-idea·mybatis
程序猿乐锅1 天前
【黑马点评 | 第二篇】Redis 缓存更新策略与商铺缓存实现
java·网络·redis·spring·mybatis
萧瑟余晖2 天前
MyBatis 核心原理详解
架构·mybatis
MZA6662 天前
实战:基于 XXL-JOB + 策略模式 + Nacos 配置化的 CSV 导出任务系统设计
java·spring boot·mybatis
干到60岁退休的码农4 天前
15.创建获取用户接口与JWT认证器
java·spring boot·mybatis
干到60岁退休的码农4 天前
16.过滤器中处理异常响应返回
java·spring boot·mybatis
敲代码的嘎仔5 天前
互动问答系统实战:两级评论模型、ES 搜索集成、Caffeine 多级缓存全记录
java·开发语言·数据库·elasticsearch·缓存·mybatis·高并发
无风听海6 天前
深入解析 Elasticsearch 的 match_phrase_prefix与 match_bool_prefix
大数据·elasticsearch·mybatis
摆烂z7 天前
定时任务同步数据--续跑&重试
java·mybatis·ai编程
Wang's Blog7 天前
Java框架快速入门: Spring Security+OAuth2之实现UserDetails与GrantedAuthority深度定制
java·spring·mybatis