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

相关文章

  • JDK,TOMCAT,MAVEN,Springboot,Spring版本对应详解

    JDK,TOMCAT,MAVEN,Springboot,Spring版本对应详解

    本文介绍了如何升级JDK、Tomcat和Maven,并详细描述了配置环境变量的方法,通过修改JAVA_HOME、CATALINA_HOME和MAVEN_HOME等环境变量,可以实现不同版本JDK、Tomcat和Maven的切换
    2026-04-04
  • Mybatis控制台打印SQL语句的两种实现方式

    Mybatis控制台打印SQL语句的两种实现方式

    在使用Mybatis开发时,由于可以动态拼接SQL,当动态SQL拼接块过多,直接从*mapper.xml中找出完整的SQL较难,此时,可以通过两种方法调试出SQL,方法一,将ibatislog4j运行级别调到DEBUG,在控制台打印出ibatis运行的SQL语句
    2024-10-10
  • java 算法之希尔排序详解及实现代码

    java 算法之希尔排序详解及实现代码

    这篇文章主要介绍了java 算法之希尔排序详解及实现代码的相关资料,需要的朋友可以参考下
    2017-03-03
  • 深入了解java Lombok的使用方法

    深入了解java Lombok的使用方法

    这篇文章主要介绍了深入了解java Lombok的使用,Lombok是一个通过注解以达到减少代码的Java库,如通过注解的方式减少get,set方法,构造方法等,需要的朋友可以参考下
    2019-06-06
  • 解决IDEA报错Failed to start bean‘documentationPluginsBootstrapper‘问题

    解决IDEA报错Failed to start bean‘documentationPluginsBootstra

    这篇文章主要介绍了解决IDEA报错Failed to start bean‘documentationPluginsBootstrapper‘问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java设计模式--代理模式

    Java设计模式--代理模式

    代理就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用
    2021-07-07
  • Springboot引用外部配置文件的方法步骤

    Springboot引用外部配置文件的方法步骤

    这篇文章主要介绍了Springboot引用外部配置文件的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Spring全家桶中@CacheEvict无效情况的问题解决

    Spring全家桶中@CacheEvict无效情况的问题解决

    本文主要介绍了SpringBoot中@CacheEvict注解删除缓存无效的情况,主要包括Controller直接调用、key值不匹配、方法组织、返回值类型和代理机制,具有一定的参考价值,感兴趣的可以了解一下
    2025-10-10
  • java 中ThreadPoolExecutor原理分析

    java 中ThreadPoolExecutor原理分析

    这篇文章主要介绍了java 中ThreadPoolExecutor原理分析的相关资料,需要的朋友可以参考下
    2017-03-03
  • java使用Jco连接SAP过程

    java使用Jco连接SAP过程

    这篇文章主要介绍了java使用Jco连接SAP过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论