MyBatis Plus 逻辑删除

这篇具有很好参考价值的文章主要介绍了MyBatis Plus 逻辑删除。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

何为逻辑删除

  1. 删除数据,可以通过物理删除,也可以通过逻辑删除。

  2. 物理删除指的是直接将数据从数据库中删除,不保留。

  3. 逻辑删除指的是修改数据的某个字段,使其表示为已删除状态,而非删除数据,保留该数据在数据库中,但是查询时不显示该数据(查询时过滤掉该数据)。

方案

给数据表增加一个字段:is_del,用于表示该数据是否被逻辑删除,初始值为 0。0 表示未删除, 1 表示删除。
 

方法一

实体类字段上加上注解

  • value = “未删除的值,默认值为0”;若设置为2,则查询时 where 后面自动拼接 is_del = 2
  • delval = “删除后的值,默认值为1”
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty("是否删除标识 0:未删除  1:删除")
@TableLogic(value = "0",delval = "1")
private int isDel;

执行删除,原 deleteById 会物理删除,现在实现逻辑删除

testMapper.deleteById(id);

执行删除后,id 对应行数据的 is_del 字段会变成 1

由于 isDel 添加了 @TableLogic 注解,MyBatis Plus 做所有查询操作时,自动会在 where 条件后面拼上 is_del = 0,所以 is_del 置一后,实现了逻辑删除

思考:一般情况下,我们表设计会有两个时间字段,一个时创建时间,另一个是最后更新时间;通过最后更新时间我们可以知道该数据被删除的时间,那么方法一 deleteById 后,同时更新最后修改时间吗?

:不可以,如需改变最后修改时间,请选择方法二
 

方法二

思路就是通过 update 方法来把 is_del 从 0 更新为 1,通过 MyBatis Plus 提供的自动填充功能,可以自动更新最后修改时间和最后修改人

配置自动填充

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;

@Component
public class MyObjectHandler implements MetaObjectHandler {

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "mender", () -> this.getUserName(), String.class);
        this.strictInsertFill(metaObject, "menderId", () -> this.getUserId(), Long.class);
        this.strictInsertFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class);
    }

    private String getUserName() {
        return "username";
    }

    private Long getUserId() {
        return -1L;
    }
}

service 层执行,找出 id 对应的一行,然后把 is_del 字段更新成 1


    public void deleteById(Long id) {
        LambdaUpdateWrapper<TestPO> updateWrapper = new UpdateWrapper<TestPO>().lambda();
        updateWrapper.set(TestPO::getIsDel, 1).eq(TestPO::getId, id);
        baseMapper.update(new TestPO(), updateWrapper);
    }

此时最后修改人和最后修改时间等于删除人和删除时间,完美文章来源地址https://www.toymoban.com/news/detail-431997.html

到了这里,关于MyBatis Plus 逻辑删除的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis-Plus条件构造器[常用的模糊查询、排序查询、逻辑查询和指定字段查询案例]

    Mybatis-Plus知识点[MyBatis+MyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客  Mybatis-Plus+SpringBoot结合运用_心态还需努力呀的博客-CSDN博客 MyBaits-Plus中@TableField和@TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作(通过id更新和条件更新)_心态还需努力呀的博客

    2024年02月06日
    浏览(86)
  • MyBatis-Plus使用条件构造器实现不同条件的查询,更新删除操作

    Wrapper 是所有条件构造器的父类,作用是生成条件语句,即where后面的sql子句 在调用查询,更新,删除操作时,需要根据条件进行判断,可以使用条件构造器进行组合条件,生成where后面条件子句 QueryWrapper,UpdateWrapper LambdaQueryWrapper,LambdaUpdateWrapper UpdateWrapper提供了set方法,可以

    2024年02月15日
    浏览(43)
  • Spring Boot学习随笔- 集成MyBatis-Plus(三)自定义SQL、分页实现(PaginationInterceptor )、更新和删除详细方法

    学习视频:【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备! 自定义mapper文件是为了应对一些更复杂的查询场景,首先先配置映射路径 由于这里的mapper文件放在java文件夹中,所以要在pom.xml里进行配置 mapper 测试 在MyBatis Plus中, 物理分页 和 内

    2024年02月03日
    浏览(55)
  • spring boot集成mybatis-plus——Mybatis Plus 查询数据(图文讲解)

     更新时间 2023-01-03 16:07:12 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 查询数据库表中的数据。 在前面小节中,我们已经定义好了一个用于测试的用户表, 执行脚本如下: 定义一个名为  User  实体类: 不明白 Mybatis Plus 实体类注解的小伙伴,可参考前面

    2024年02月02日
    浏览(59)
  • mybatis(plus)多数据源

         一个项目大部分都是单一数据库多一些,但是有时候会需要用多个库,所以这时候据需要使用多数据源。我这里使用springboot+mybatis(plus)+druid多数据源. 目前我知道有两种方式,一种方式是需要在service实现类上添加@DS,一种方式是通过配置的方式,配置不同的SqlSessionFac

    2024年02月06日
    浏览(43)
  • spring boot集成mybatis-plus——Mybatis Plus 批量 Insert_新增数据(图文讲解)

     更新时间 2023-01-10 16:02:58 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 实现 MySQL 批量插入数据。 先抛出一个问题:假设老板给你下了个任务,向数据库中添加 100 万条数据,并且不能耗时太久! 通常来说,我们向 MySQL 中新增一条记录,SQL 语句类似如下:

    2024年02月04日
    浏览(46)
  • Mybatis Plus 大数据游标分页

            随着业务的发展,许多应用面临处理大数据量的挑战。传统的分页方式在处理大数据量时可能带来性能问题,而MyBatis Plus提供的游标分页是一种解决方案,可以显著提高性能,更有效地处理大量数据。 一、传统分页问题 在传统的分页查询中,我们通常使用limit 语句

    2024年04月24日
    浏览(33)
  • mybatis-plus数据权限实现

    数据权限是平台系统中不可分割的一部分,在mybatis框架中,大部分都是基于mybatis拦截器进行数据权限的插入,有的将数据权限参数作为XML的标签,有的是基于注解方式,但是不管这两种方式如何,都必须在拦截器中处理自己解析SQL,稍有不慎或者说没解析到就会出现各种奇

    2024年02月05日
    浏览(34)
  • spring boot集成mybatis-plus——Mybatis Plus 新增数据并返回主键 ID(图文讲解)

     更新时间 2023-01-10 15:37:37 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 框架给数据库表新增数据,主要内容思维导图如下: Mybatis Plus 新增数据思维导图 为了演示新增数据,在前面小节中,我们已经定义好了一个用于测试的用户表, 执行脚本如下: 定义一

    2024年02月02日
    浏览(52)
  • MyBatis Plus 数据库字段加密处理

    当项目开发到一半,可能突然客户会要求对数据库里面比如手机号、身份证号的字段进行加密; 在保证开发最快、影响范围最小的情况下,我们需要选择一种介于数据库和代码之间的工具来帮我们实现自动加解密; 这里我们选用AES对称加密算法,因为它是可逆算法。 AES加密

    2024年02月07日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包