ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

逻辑删除(通俗易懂)

2022-01-27 18:59:24  阅读:230  来源: 互联网

标签:COMMENT 逻辑 删除 DEFAULT 通俗易懂 NULL 数据


逻辑删除

(1)简介  

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

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

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

给数据表增加一个字段:delete_flag,用于表示该数据是否被逻辑删除。

CREATE TABLE test_mybatis_plus_users
(
    id BIGINT NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    create_time timestamp NULL DEFAULT NULL COMMENT '创建时间',
    update_time timestamp NULL DEFAULT NULL COMMENT '最后修改时间', 
    delete_flag tinyint(1) NULL DEFAULT NULL COMMENT '逻辑删除(0 未删除、1 删除)',
    PRIMARY KEY (id)
);

(2)使用逻辑删除。  

可以定义一个自动填充规则,初始值为 0。0 表示未删除, 1 表示删除。

/**
 * 逻辑删除(0 未删除、1 删除)
 */
@TableLogic(value = "0", delval = "1")
@TableField(fill = FieldFill.INSERT)
private Integer deleteFlag;
​

 在创建 handler 包并创建 MyMetaObjectHandler 

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
           this.strictInsertFill(metaObject, "deleteFlag", Integer.class, 0);

    }

    @Override
    public void updateFill(MetaObject metaObject) {

    }
}

(3)简单测试  使用 mybatis-plus 封装好的方法时,会自动添加逻辑删除的功能。  若是自定义的 sql 语句,需要手动添加逻辑。

 //逻辑删除
    @Test
    public void testDelete() {
        if (usersService.removeById(1444840211061186561L)) {
            System.out.println("删除数据成功");
            usersService.list().forEach(System.out::println);
        } else {
            System.out.println("删除数据失败");
        }
    }

若去除 TableLogic 注解,再执行 testDelete 时进行物理删除,直接删除这条数据。

标签:COMMENT,逻辑,删除,DEFAULT,通俗易懂,NULL,数据
来源: https://blog.csdn.net/weixin_46565024/article/details/122722276

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有