MyBatis-Plus:saveOrUpdate根据指定字段更新或插入方式
一、概述
MyBatis-Plus中提供了一个saveOrUpdate()方法,默认情况下可以根据主键是否存在进行更新或插入操作,但是实际场景中,我们会遇到根据指定字段进行更新或插入的情况。
以下记录一下如何根据指定字段进行更新或插入操作。
二、实现方式
- 功能描述: 根据实体对象的主键 ID 进行判断,存在则更新记录,否则插入记录。
- 返回值: boolean,表示插入或更新操作是否成功。
// @TableId 注解属性值存在则更新记录,否插入一条记录 boolean saveOrUpdate(T entity); // 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法 boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
若要根据指定字段更新,则使用saveOrUpdate(T entity, Wrapper<T> updateWrapper)方法。
IService中存在一种这样的方法,接收两个参数,
default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper) {
return this.update(entity, updateWrapper) || this.saveOrUpdate(entity);
}在执行时的执行逻辑是这样的:
- 首先根据updateWrapper查询需要更新哪个记录;
- 如果能查询到记录,则进行更新操作,更新时会根据entity对象属性的值进行更新,注意null值会忽略,如果未能查询到记录,则会把entity对象进行插入操作;
以一段代码给出详细的解释:
// 导入必要的类
import com.baomidou.mybatisplus.core.conditions.query.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
// 创建一个UpdateWrapper对象,指定查询条件
UpdateWrapper<User> updateWrapper = Wrappers.query();
updateWrapper.eq("id", 111); // 假设这里是你的指定字段和条件
// 调用saveOrUpdate方法,传入实体对象和UpdateWrapper对象
userMapper.saveOrUpdate(user, updateWrapper);三、总结
总的来说,saveOrUpdate(T entity, Wrapper updateWrapper)方法
会根据指定的条件先进行查询,然后根据查询结果自动决定是执行更新操作还是插入操作,从而实现根据指定字段执行保存或更新的逻辑。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Sharding-jdbc报错:Missing the data source
在使用MyBatis-plus进行数据操作时,新增Order实体属性后,出现了数据源缺失的提示错误,原因是因为userId属性值使用了随机函数生成的Long值,这与sharding-jdbc的路由规则计算不匹配,导致无法找到正确的数据源,通过调整userId生成逻辑2024-11-11
SpringBoot 整合 Avro 与 Kafka的详细过程
本文介绍了如何在Spring Boot中使用Avro和Kafka进行数据的序列化和反序列化,并通过MyBatisPlus将数据存入数据库,感兴趣的朋友跟随小编一起看看吧2024-12-12
SpringBoot @Cacheable自定义KeyGenerator方式
这篇文章主要介绍了SpringBoot @Cacheable自定义KeyGenerator方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-12-12


最新评论