Mybatis plus逻辑删除失败的BUG操作

开发调试的时候发现Mybatis Plus的逻辑删除失效了,看了下配置文件发现没有问题,通过查看以下源码发现

逻辑删除需要注入的bean,查看这个bean的源码如下

查看其中一个实例的类的源码,如通过ID逻辑删除LogicDeleteById的源码,如下

mp在项目启动时预加载SQL是通过TableInfo中logicDelete字段判断是否开启逻辑删除的。然后让我们来看看mp内部是如何判断是否开启逻辑删除的。

先看如下源码

大概就是讲实体类中的字段进行循环映射数据库字段并封装到TableFieldInfo类中,实体类信息封装到TableInfo中,在让我们来看看MP循环处理字段时候做了什么操作。

上图中的这一行代码,

让我们看看这行代码具体做了什么

现在已经很明确了,mp通过判断字段上是否有TableLogic注解来判断该实体类映射的表是否开启逻辑删除。但这一步是放到实体类所有的字段列表的循环中的,当逻辑删除字段在所有的字段中间而不是末尾的时候,判断逻辑删除的表示logicDelete会被覆盖为false,然后导致解析方法生成声明的时候判断为没有开启逻辑删除。

mp已经更新了这个错误,在设置logicDelete时会先判断原来的删除标识是否为true,否则保持原来的初始值false。

补充知识:分布式 mybatis-plus 逻辑删除不生效 升级后org.mybatis.logging.LoggerFactory报错

解决方案:

第一步:升级mybatisplus版本到3.2.0

第二步:多添加一个扩展包

<dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-extension</artifactId>
        <version>3.2.0</version>
      </dependency>

以上这篇Mybatis plus逻辑删除失败的BUG操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • MyBatis-Plus之逻辑删除的实现

    特别是互联网项目,对于数据一般是不能删除的(涉及到后面的数据分析),这就涉及到逻辑删除.所谓逻辑删除指的是数据并不是真正的删除,只是改数据表对应数据的状态(数据表中通常有一列叫delFlag,以此标识正常状态或删除状态).逻辑删除一般都是更新操作,但写大量更新方法无疑是增加代码量,MyBatis-Plus又是如何实现逻辑删除的呢?其实很简单一共两步. 一.配置文件配置 mybatis-plus: global-config: db-config: logic-delete-value: 1 #

  • 解决mybatis plus 一对多分页查询问题

    最近用mybatis plus做项目,单表的增删改查都正常,做到 1对多表的分页时,用resultMap返回的时候发现返回的记录和总数对不上 返回的记录是 一 表的,二返回的总数是 多 表 查了一下,这个或者是PLUS的bug 大概的解决办法如下图:用collection,传参用column,我这里用了一个小技巧, 把外面传入的参数,作为主表的column传入到从表. 这里没找到其他方法,有其他方法可以评论告诉我 补充知识:解决Mybatis-plus利用collection查询一对多分页数据的

  • mybatis升级mybatis-plus时踩到的一些坑

    前言 最近使用RuoYi-Vue来做后台管理脚手架.RuoYi-Vue 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot.Spring Security.MyBatis.Jwt.Vue),内置模块如:部门管理.角色用户.菜单及按钮授权.数据权限.系统参数.日志管理.代码生成等.在线定时任务配置:支持集群,支持多数据源.其官方文档如下 http://doc.ruoyi.vip/ 感兴趣的朋友,可以点链接查看.这个平台目前的orm框架是mybatis,而项目组的o

  • Mybatis plus逻辑删除失败的BUG操作

    开发调试的时候发现Mybatis Plus的逻辑删除失效了,看了下配置文件发现没有问题,通过查看以下源码发现 逻辑删除需要注入的bean,查看这个bean的源码如下 查看其中一个实例的类的源码,如通过ID逻辑删除LogicDeleteById的源码,如下 mp在项目启动时预加载SQL是通过TableInfo中logicDelete字段判断是否开启逻辑删除的.然后让我们来看看mp内部是如何判断是否开启逻辑删除的. 先看如下源码 大概就是讲实体类中的字段进行循环映射数据库字段并封装到TableFie

  • MyBatis Plus逻辑删除和分页插件使用详解

    概要:Mybatis plus 官网链接 :https://mp.baomidou.com/guide/ 一.依赖配置: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x

  • Mybatis plus逻辑删除注解@TableLogic的使用

    目录 物理删除和逻辑删除 @TableLogic注解 @TableLogic注解默认值: @TableLogic注解用法 首先这个注解是苞米豆出品,也就是我们常说的mybatis升级版的东西. 简单讲一下这个注解的用法:我们在做数据库设计的时候有时候哪怕是删除也不会真的走物理删除,毕竟这样很多数据就不可恢复了,大多数时候很多删除都是用逻辑删除. 物理删除和逻辑删除 简单来说物理删除就是真的把这条数据从数据库删除了.而逻辑删除主要是把表中的某一个字段作为标识符,一般我们常用的会默认初始为0,当我们

  • Mybatis 插入和删除批处理操作

    在操作数据库时,经常会碰到批量插入.批量删除的情况,直接执行SQL语句还好做一点,当使用Mybatis进行批量插入.批量删除时会有一些问题.下面对使用Mybatis批量插入,批量删除进行介绍. 1. 批量插入 Java代码: // Model: Test.java @Data public class Test { private String x; private String y; private String z; } // Mapper: TestMapper.java public v

  • mybatis plus实现分页逻辑删除

    一.分页 通过mybatis-plus实现分页,也是很简单,插件大法. 1.配置分页插件 把分页的插件也配置到统一的配置类里: @Configuration // 配置扫描mapper的路径 @MapperScan("com.pingguo.mpdemo.mapper") public class MpConfig { // 乐观锁插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { re

  • MyBatis Plus 导入IdType失败的解决

    目录 MyBatis Plus 导入IdType失败 MybatisPlus学习笔记 一.MybatisPlus概述 二.快速入门 三.配置日志 四.CRUD扩展 1.Insert 2.Update 3.自动填充 4.乐观锁 5.查询操作 6.分页查询 7.删除操作 8.逻辑删除 9.性能分析插件(新版本无) 五.条件构造器 六.代码自动生成器 MyBatis Plus 导入IdType失败 import com.baomidou.mybatisplus.annotation.IdType; 修

  • MyBatis-Plus解决逻辑删除与唯一索引的问题

    目录 简介 问题复现 建库建表 代码 测试 解决方案 方案1:将字段设置为id(推荐) 方案2:将字段设置为当前时间(不推荐) 简介 说明 本文用示例介绍MyBatis-Plus如何解决逻辑删除与唯一索引的问题. 物理删除与逻辑删除 数据是很重要的,数据库里的数据在删除时一般不会用DELETE语句直接物理删除. 通常的做法是使用逻辑删除,也就是:新加一个标记是否删除的字段,在删除时不是真的删除,而是使用UPDATE语句将某个字段设置为删除状态.例如:"deleted_flag",0表示

  • MybatisPlus中的删除和逻辑删除及区别介绍

    删除又分为逻辑删除和物理删除,那么它们有什么区别呢? 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据. 逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为"被删除状态",之后在数据库中仍旧能看到此条数据记录. 在我们日常开发中,为了保留数据,经常会使用逻辑删除的方式进行数据删除,下面我们就来看看物理删除与逻辑删除怎么实现的吧 首先假设我有这样一张表 实体类: package com.atguigu.mybatis_plus.entity; import

  • SpringBoot+Mybatis+Vue 实现商品模块的crud操作

    准备工作 第一步 创建新module,名字为10-springboot-goods-vue. 第二步 添加maven依赖并进行初步配置(拷贝即可) 第三步 拷贝pojo,dao,service包中的所有接口和类. 第四步 拷贝静态资源到static目录(例如vue.js,axios.min.js) 商品查询设计及实现 创建GoodsController并定义相关方法,代码如下: package com.cy.pj.goods.controller; import com.cy.pj.goods.

  • 关于mybatis-plus逻辑删除自动填充更新时间的问题

    目录 前言 问题发现 寻找原因 解决方法 方法一 方法二 补充写法 前言 mybatis-plus是对mybatis的增强,mybatis-plus更像是面向对象编程,数据库基本CRUD的操作可以不用手动编写SQL语句,大大提高了开发的效率. mybatis-plus有一个扩展功能:自动填充.此功能常见的应用场景为,插入数据的时候自动添加创建时间.创建人.修改时间.修改人.删除标记.通过实现MetaObjectHandler接口,重写insertFill.updateFill方法,当我们插入和修

随机推荐