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 逻辑删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Java MCP 实战之如何构建跨进程与远程的工具服务

    Java MCP 实战之如何构建跨进程与远程的工具服务

    MCP协议由Anthropic推出,支持stdio/SSE/Streaming通讯,提供工具、提示、资源原语,适用于AI与外部服务集成,兼容Java及多框架,具备鉴权、断线重连等生产特性,助力构建分布式系统,本文给大家介绍Java MCP实战之如何构建跨进程与远程的工具服务,感兴趣的朋友一起看看吧
    2025-07-07
  • Mybatis-Plus开发提速器mybatis-plus-generator-ui详解

    Mybatis-Plus开发提速器mybatis-plus-generator-ui详解

    这篇文章主要介绍了Mybatis-Plus开发提速器mybatis-plus-generator-ui,本文简要介绍一款基于Mybatis-Plus的代码自助生成器,文章通过实例集成的方式来详细讲解mybatis-plus-generator-ui,从相关概念到实际集成案例,以及具体的扩展开发介绍,需要的朋友可以参考下
    2022-11-11
  • 详解SpringBoot开发案例之整合定时任务(Scheduled)

    详解SpringBoot开发案例之整合定时任务(Scheduled)

    本篇文章主要介绍了详解SpringBoot开发案例之整合定时任务(Scheduled),具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07
  • Java中的BaseTypeHandler自定义类型转换器的使用

    Java中的BaseTypeHandler自定义类型转换器的使用

    这篇文章主要介绍了Java中的BaseTypeHandler自定义类型转换器的使用,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Java后端开发中Service层依赖注入的最佳实践

    Java后端开发中Service层依赖注入的最佳实践

    文章主要探讨了在Java后端开发中,Service层依赖注入Mapper还是其他Service的问题,通过分析三层架构的职责划分,文章指出了在不同场景下选择合适的注入方式,需要的朋友可以参考下
    2026-01-01
  • 基于Java代码实现数字在数组中出现次数超过一半

    基于Java代码实现数字在数组中出现次数超过一半

    这篇文章主要介绍了基于Java代码实现数字在数组中出现次数超过一半的相关资料,需要的朋友可以参考下
    2016-02-02
  • java原生动态生成验证码

    java原生动态生成验证码

    这篇文章主要为大家详细介绍了java原生动态生成验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • Java实现多选批量删除功能(vue+Element)

    Java实现多选批量删除功能(vue+Element)

    这篇文章主要为大家详细介绍了Java实现多选批量删除功能,包括前端vue实现代码文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • SpringBoot核心@SpringBootApplication使用介绍

    SpringBoot核心@SpringBootApplication使用介绍

    这篇文章主要介绍了SpringBoot核心@SpringBootApplication的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 2020最新版idea激活教程(推荐)

    2020最新版idea激活教程(推荐)

    这篇文章主要介绍了2020最新版idea激活教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02

最新评论