mybatis-plus实现逻辑删除的示例代码

 更新时间:2024年05月16日 10:08:38   作者:IT云烟.  
在大多数公司里,都会采用逻辑删除的方式,本文主要介绍了mybatis-plus实现逻辑删除的示例代码,具有一定的参考价值,感兴趣的可以了解一下

一、什么是逻辑删除?

逻辑删除的本质是修改操作,并不是真正的删除,而是在表中将对应的是否删除标识(del_flag)做修改操作。比如0是未删除,1是删除。在逻辑上数据是被删除的,但数据本身依然存在库中。

逻辑删除sql语句为:

update user set del_flag=1 where id = 1 and del_flag=0

这种设计,后端每次向数据库查询数据时,只查del_flag=0(未删除)的数据。拿上面sql举例,那么客户端进行查询id为1的信息,服务器就不会提供信息。
查询sql为:

select id,name,del_flag from user where del_flag=0

二、为什么使用逻辑删除?

  • 方便数据恢复,保护数据本身的价值。
  • 保证数据连续性,对主键的影响可能会导致底层B+树重建,而 delete 和 update id 都会影响主键。

事实上,在大多数公司里,都会采用逻辑删除的方式,因为数据的价值更大,被删除的数据也非常有记录价值,这样的操作也并不会提高太多的操作难度。

三、在springboot使用Mybatis-Plus提供的逻辑删除

字段类型支持说明:支持所有数据类型(推荐使用 Integer,Boolean,LocalDateTime)

如果数据库字段使用datetime,逻辑未删除值和已删除值支持配置为字符串null,另一个值支持配置为函数来获取值如now()

3.1、在application.yml配置

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

3.2、实体类字段上加上@TableLogic注解

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.io.Serializable;

/**
 * 用户订单
 *
 * @author yunyan
 */
@TableName("t_user")
@Data
public class UserPO implements Serializable {

    /**
     * id
     */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    /**
     * 用户名
     */

    private String userName;
    /**
     * 密码
     */

    private String password;
    /**
     * 昵称
     */

    private String nickName;
    /**
     * 删除标识
     */
    @TableLogic
    private Integer delFlag;

3.3、演示

 3.4、UserMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.testinterface.entity.po.UserPO;
import org.apache.ibatis.annotations.Mapper;

/**
 * 用户映射器
 *
 * @author yunyan
 */
@Mapper
public interface UserMapper extends BaseMapper<UserPO> {
}

 3.5、IUserService

/**
 * 用户服务
 *
 * @author yunyan
 */
public interface IUserService extends IService<UserPO> {

}

3.6、UserServiceImpl

/**
 * 用户服务impl
 *
 * @author yunyan
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, UserPO> implements IUserService {

}

3.7、controller

@RequestMapping("/open/del")
    public ResultUtil del(UserParam userParam){
        UserPO one = userService.getOne(new LambdaQueryWrapper<UserPO>()
                .eq(UserPO::getUserName, userParam.getUserName()));
        boolean b = userService.removeById(one);
        System.out.println(b);
        return ResultUtil.success(b);
    }

3.8、ResultUtil

@Data
public class ResultUtil {

    private String code;

    private String message;

    private  Object data;
    public static  ResultUtil success(Object data){
        ResultUtil resultUtil = new ResultUtil();
        resultUtil.setCode("200");
        resultUtil.setMessage("请求成功");
        resultUtil.setData(data);
        return resultUtil;
    }
}

3.9、浏览器请求

 3.10、数据库的数据

可以看到,加了@TableLogic注解的字段对应的数据库字段,由0(未删除)改为1(已删除)

到此这篇关于mybatis-plus实现逻辑删除的示例代码的文章就介绍到这了,更多相关mybatis-plus 逻辑删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

    MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

    本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-08-08
  • Java利用Netty时间轮实现延时任务

    Java利用Netty时间轮实现延时任务

    时间轮是一种可以执行定时任务的数据结构和算法。本文将为大家详细讲解一下Java如何利用Netty时间轮算法实现延时任务,感兴趣的小伙伴可以了解一下
    2022-08-08
  • Java中的gateway自定义过滤器详解

    Java中的gateway自定义过滤器详解

    这篇文章主要介绍了Java中的gateway自定义过滤器详解,过滤器是指gateway在路由过程中(A地址路由到B地址)生效进行过滤操作的,所有首先你得先配一个地址路由,本文提供了部分实现代码,需要的朋友可以参考下
    2023-11-11
  • SpringBoot中使用监听器的方法详解

    SpringBoot中使用监听器的方法详解

    这篇文章主要为大家详细介绍了SpringBoot中使用监听器的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Spring Boot环境属性占位符解析及类型转换详解

    Spring Boot环境属性占位符解析及类型转换详解

    这篇文章主要给大家介绍了关于Spring Boot环境属性占位符解析及类型转换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • Springboot Spring原理2深度解析

    Springboot Spring原理2深度解析

    SpringBoot的⾃动配置就是当Spring容器启动后, ⼀些配置类, bean对象等就自动存入到了IoC容器中,不需要我们手动去声明, 从而简化了开发, 省去了繁琐的配置操作,这篇文章介绍Springboot Spring原理2,感兴趣的朋友一起看看吧
    2025-11-11
  • 如何理解Java的跨平台特性操作

    如何理解Java的跨平台特性操作

    这篇文章主要介绍了如何理解Java的跨平台特性操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 深入了解Java接口回调机制

    深入了解Java接口回调机制

    这篇文章主要介绍了Java接口回调机制,下面我们来一起学习一下吧
    2019-05-05
  • Java泛型实现类型安全的通用类型转换器

    Java泛型实现类型安全的通用类型转换器

    在开发中,我们常常需要在不同类型之间进行转换,为了提高代码的可读性与安全性,Java的泛型机制提供了强大的类型检查能力,下面我们就来看看如何通过泛型实现类型安全的通用转换器
    2024-11-11
  • Spark学习笔记之Spark中的RDD的具体使用

    Spark学习笔记之Spark中的RDD的具体使用

    这篇文章主要介绍了Spark学习笔记之Spark中的RDD的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06

最新评论