当前位置: 首页 > news >正文

MyBatis-Plus 更新逻辑删除字段(is_delete)无效问题分析与解决方案

问题背景

在使用 MyBatis-Plus 进行数据更新时,发现 is_delete 字段无法被正确更新,即使显式赋值后,数据库仍然没有变化。以下是两个具体问题和解决方案的总结。


问题1:为什么设置了  is_delete 字段的值但是不更新?

代码示例

ApiKey apiKey = apiKeyRepository.selectOne(queryWrapper);
if (apiKey == null) {return false;
}
// 尝试软删除
apiKey.setIsDelete(1);  // 设置为已删除
apiKey.setStatus(ApiKey.STATUS_DISABLED);   
int updated = apiKeyRepository.updateById(apiKey);  // 执行更新
UPDATE api_key 
SET user_id=?, api_key_hash=?, key_name=?, ..., update_time=? 
WHERE id=? AND is_delete=0

发现 is_delete 并未出现在 SET 部分,而是作为 WHERE 条件。

原因分析

  1. @TableLogic 的作用

    • 该注解标记的字段(如 is_delete)会被 MyBatis-Plus 视为逻辑删除字段。

    • updateById() 默认会忽略逻辑删除字段的更新,防止误操作导致数据不一致。

    • 同时,MyBatis-Plus 会自动在 SQL 的 WHERE 条件中添加 AND is_delete=0,确保只更新未删除的记录。

  2. 设计逻辑

    • 逻辑删除字段通常由专门的 deleteById() 方法自动处理,而不是手动更新。


问题2:为什么移除了 @TableLogic 注解,is_delete 仍然无法更新?

我怀疑是直接配在了nacos中,然后打印出来发现是值isDelete,导致的全局都是软删除

@Value("${mybatis-plus.global-config.db-config.logic-delete-field}")private String maxApiKeyCount;

最终推荐方案

// 使用 UpdateWrapper 确保更新
apiKeyRepository.update(new UpdateWrapper<ApiKey>().eq("id", apiKey.getId()).set("is_delete", 1).set("status", ApiKey.STATUS_DISABLED)
);

总结

问题原因解决方案
@TableLogic 导致 is_delete 不更新MyBatis-Plus 自动忽略逻辑删除字段使用 UpdateWrapper 或 deleteById()
移除 @TableLogic 后仍然不更新全局配置、字段限制、空值问题检查配置、确保非空、手动更新

最佳实践

  • 逻辑删除 → 直接使用 deleteById()

  • 手动更新逻辑删除字段 → 使用 UpdateWrapper

http://www.xdnf.cn/news/1256923.html

相关文章:

  • C#里使用NModbus来读取寄存器的值
  • localforage的数据仓库、实例、storeName和name的概念和区别
  • 杰理-获取系统运行时间 jiffies_msec
  • QT5.15 mingw
  • AI题解5
  • Windows Oracle 11 g dmp数据库恢复笔记
  • java excel转图片常用的几种方法
  • [论文阅读] 软件工程 | 软件工程中的同理心:表现、动机与影响因素解析
  • 微信小程序与后台管理系统开发全流程指南
  • 单链表专题---暴力算法美学(1)(有视频演示)
  • 【性能测试】---测试工具篇(jmeter)
  • 超声波自动气象站如何精准预警极端天气
  • 深入解析 Dash 中的 dcc.Checklist:构建高效多选交互界面
  • 【LeetCode】set和map相关算法题 前K个高频单词、随机链表的复制、两个数组的交集、环形链表
  • 视觉语言模型的空间推理缺陷——AI 在医学扫描中难以区分左右
  • 生成式AI时代,Data+AI下一代数智平台建设指南
  • 8.3.1 注册服务中心Etcd
  • 商城小程序怎么做?如何开发母婴用品商城小程序?
  • [C++20]协程:语义、调度与异步 | Reactor 模式
  • NVIDIA/k8s-device-plugin仓库中GPU无法识别问题的issues分析报告
  • LoRaWAN的网络拓扑
  • mapbox进阶,mapbox-gl-draw绘图插件扩展,绘制新增、编辑模式支持点、线、面的捕捉
  • 【已解决】-bash: mvn: command not found
  • PyTorch LSTM文本生成
  • 专题:2025财务转型与AI赋能数字化报告|附30+份报告PDF汇总下载
  • Casrel关系抽取
  • 【2025最新】在 macOS 上构建 Flutter iOS 应用
  • 关于时钟门控ICG的一切(与门及或门门控)
  • 紫光同创Logos2+RK3568JHF开发板:国产异构计算平台的破局者
  • Mongodb常用命令简介