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

 更新时间:2023年05月29日 09:46:01   作者:Bruce1801  
本文主要介绍了mybatis-plus实现逻辑删除的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

什么是逻辑删除?

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

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

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

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

为什么用到逻辑删除?

比如:在一家销售公司中,有两个员工在一月份离职了,后台管理人员在办离职时,如果直接将数据库中与这两个员工相关的信息删除了,那么当经理想要看一月份的销售记录的时候,只能看到部分销售记录,销售金额对不上。这种情况肯定是不允许发生的

如下图:

本来一月总共销售了17,000,00元,结果删除后只剩下了5,000,00。

只需要在员工工号后面加delete_flag字段,用于标记是否被删除即可。

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

字段类型支持说明:

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

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)

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

@Data
public class UserPO implements Serializable {
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    private String userName;
    private String password;
    private String nickName;
    @TableLogic
    private int delFlag;
}

演示

数据库t_user表中数据:

UserPOMapper:

@Mapper
public interface UserPOMapper extends BaseMapper<UserPO> {
}

IUserService:

public interface IUserService extends IService<UserPO> {
}

IUserServiceImpl:

@Service
public class IUserServiceImpl extends ServiceImpl<UserPOMapper, UserPO> implements IUserService {
}

Controller:

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

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;
    }
}

浏览器请求:

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

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

相关文章

  • Java高并发下请求合并处理方式

    Java高并发下请求合并处理方式

    这篇文章主要介绍了Java高并发下请求合并处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • SpringBoot读写xml上传到AWS存储服务S3的示例

    SpringBoot读写xml上传到AWS存储服务S3的示例

    这篇文章主要介绍了SpringBoot读写xml上传到S3的示例,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-10-10
  • JAVA-4NIO之Channel之间的数据传输方法

    JAVA-4NIO之Channel之间的数据传输方法

    下面小编就为大家带来一篇JAVA-4NIO之Channel之间的数据传输方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • logback的isDebugEnabled日志配置级别源码解析

    logback的isDebugEnabled日志配置级别源码解析

    这篇文章主要为大家介绍了logback的isDebugEnabled日志配置级别源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Java 六类运算符详解

    Java 六类运算符详解

    这篇文章主要介绍了Java 六类运算符,在 Java 语言中,运算符有算数运算符、关系运算符、逻辑运算符、赋值运算符、字符串连接运算符、条件运算符,感兴趣的朋友可以阅读一下
    2023-03-03
  • Java中的FutureTask源码解析

    Java中的FutureTask源码解析

    这篇文章主要介绍了Java中的FutureTask源码解析,FutureTask是一个可取消的异步计算,这个类是Future的实现类,有开始和取消一个计算的方法,如果一个计算已经完成可以查看结果,需要的朋友可以参考下
    2023-12-12
  • 聊聊java中引用数据类型有哪些

    聊聊java中引用数据类型有哪些

    这篇文章主要介绍了java中引用数据类型有哪些,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 关于Java 中 Future 的 get 方法超时问题

    关于Java 中 Future 的 get 方法超时问题

    这篇文章主要介绍了Java 中 Future 的 get 方法超时,最常见的理解就是,“超时以后,当前线程继续执行,线程池里的对应线程中断”,真的是这样吗?本文给大家详细介绍,需要的朋友参考下吧
    2022-06-06
  • 详解Java5、Java6、Java7的新特性

    详解Java5、Java6、Java7的新特性

    本编文章详细介绍了Java5、Java6、Java7的新特性,需要的朋友可以参考下
    2017-04-04
  • Java正则表达式API字符类

    Java正则表达式API字符类

    这篇文章主要介绍了Java正则表达式API字符类,Java正则表达式API也接受预定义的字符类,下面文章内容展开了更多的相关内容介绍,需要的朋友可以参考一下
    2022-06-06

最新评论