MybatisPlus逻辑删除

MybatisPlus逻辑删除**MybatisPlus逻辑删除的使用**首先我们要知道为什么要进行逻辑删除:逻辑删除可以理解为假删除,并不是真的将数据进行删除。假删除只是为了数据安全起见,在数据库中增添一个字段,我们可以默认这个字段为1时数据被删除,而字段值为0时数据被删除想象一下这样的业务场景,当一位公司职员离职,但是手续还没有办理,这时我们便可以设置逻辑删除,以保证其信息不会被立刻删除。我们电脑里的回收站正是利用了逻辑删除,我们点击删除的文件不会被立刻删除,而是放入回收站,等我们反悔时可以将其进行还原。在Mybat

大家好,又见面了,我是你们的朋友全栈君。

**

MybatisPlus——逻辑删除

**
首先我们要知道为什么要进行逻辑删除:
逻辑删除可以理解为假删除,并不是真的将数据进行删除。

假删除只是为了数据安全起见,在数据库中增添一个字段,我们可以默认这个字段为1时数据被删除,而字段值为0时数据被删除

逻辑删除是为了方便数据恢复和保护数据本身价值的一种方案。我们电脑里的回收站正是利用了逻辑删除,我们点击删除的文件不会被立刻删除,而是放入回收站,等我们反悔时可以将其进行还原。

在MybatisPlus中设置逻辑删除有以下几个步骤

1.首先为Strudent表添加logic_delete字段,通过判断logic_delete字段的数值,我们可以确定数据是否已被删除
在这里插入图片描述

2.如果logic_delete字段在数据库中并没有设置默认值(推荐设置默认值,这样更加方便),我们需要在applicationContext.xml文件中对默认值进行设置,已设置默认值可跳过此步


    <bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<!--配置globalConfig,在全局中对默认值进行设置-->
        <property name="globalConfig" ref="globalConfig"></property>

        <property name="dataSource" ref="dataSource"></property>

        <property name="configLocation" value="classpath:mybatis.xml"></property>

        <property name="typeAliasesPackage" value="com.yq.entity"></property>
    </bean>
    <bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
        <property name="dbConfig">
            <bean class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
            <!-默认被删除为1-->
                <property name="logicDeleteValue" value="1"></property>
            <!-默认未被删除为0-->
                <property name="logicNotDeleteValue" value="0"></property>
            </bean>
        </property>
    </bean>

3.实体类属性与表中字段保持一致,属性 logicDelete添加@TableLogic注解

package com.yq.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;


public class Student extends Model<Student> { 
   
    @TableId(type = IdType.AUTO)
    private int stuNo;
    private String stuName;
    @Version
    private Integer version;
    private int stuAge;

    //逻辑删除字段
    @TableLogic
    private Integer logicDelete;//这里用Integer默认为null,而int默认为0,0会产生误解


    public Student(int stuNo, String stuName, Integer version, int stuAge) { 
   
        this.stuNo = stuNo;
        this.stuName = stuName;
        this.version = version;
        this.stuAge = stuAge;
    }

    public Student(int stuNo, String stuName, int stuAge) { 
   
        this.stuNo = stuNo;
        this.stuName = stuName;
        this.stuAge = stuAge;
    }

    public Student(String stuName, int stuAge) { 
   
        this.stuName = stuName;
        this.stuAge = stuAge;
    }

    public Student() { 
   
    }

    public int getStuNo() { 
   
        return stuNo;
    }

    public void setStuNo(int stuNo) { 
   
        this.stuNo = stuNo;
    }

    public String getStuName() { 
   
        return stuName;
    }

    public void setStuName(String stuName) { 
   
        this.stuName = stuName;
    }

    public int getStuAge() { 
   
        return stuAge;
    }

    public void setStuAge(int stuAge) { 
   
        this.stuAge = stuAge;
    }



    public Integer getVersion() { 
   
        return version;
    }

    public void setVersion(Integer version) { 
   
        this.version = version;
    }

    public Integer getLogicDelete() { 
   
        return logicDelete;
    }

    public void setLogicDelete(Integer logicDelete) { 
   
        this.logicDelete = logicDelete;
    }
}

4.进行简单调用,查看结果

    //测试假删
    public static void testLogicdelete(){ 
   
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentMapper studentMapper = context.getBean("studentMapper", StudentMapper.class);
        studentMapper.delete(null);
    }

    public static void main(String[] args) throws Exception { 
   
                    testLogicdelete();
    }

执行方法之前的数据库表:
在这里插入图片描述
执行方法之后的数据库表:
在这里插入图片描述

此时我们查看日志发现
我们原本执行的删除语句(delete from student ):
在这里插入图片描述
在日志中变为对logic_delete字段的更新操作:
在这里插入图片描述

执行删除语句后数据并没有被直接删除,而且MybatisPlus自动将logic_delete字段的值更新为1,使其处于假删状态,保证了数据安全。

当我们数据库中所有数据的字段logic_delete为1,也就是被删除时,我们进行查询全部操作,发现
select * from student语句被转换为
SELECT stu_no,stu_name,version,stu_age,logic_delete FROM student WHERE logic_delete=0

在这里插入图片描述

MybatisPlus为我们自动进行了拼接操作将 WHERE logic_delete=0 在查询语句后进行拼接,以保证我们只能查询出
logic_delete=0 ,也就是未被删除的数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137607.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 详解Ajax请求(四)——多个异步请求的执行顺序

    详解Ajax请求(四)——多个异步请求的执行顺序

    2021年11月3日
  • es6的map和set的区别_sleep和wait的区别

    es6的map和set的区别_sleep和wait的区别SetSet对象可以存储任何类型的数据。值是唯一的,没有重复的值。特殊值:+0与-0恒等,不重复。undefined与undefined恒等,不重复。NaN与NaN不恒等,但在Set中只能存一个,不重复。应用:数组去重使用Set值是唯一的特点可以对数组进行去重。vararr=[…newSet([1,5,4,4,7,6,6]…

    2022年9月6日
  • C语言read函数

    C语言read函数从文件中读取指定大小的字节函数read()语法:ssize_tread(intfd,void*buf,intcount)说明:read函数从指定的打开的文件fd中读取指定大小count的字节到从buf开始的缓冲区中.返回值:若读取失败则返回-1.读取成功则返回实际读取到的字节数,有两种情况:…

    2022年6月22日
  • 中兴F450光猫设置桥接_电信光猫改桥接后上不了网络

    中兴F450光猫设置桥接_电信光猫改桥接后上不了网络前几天突然想搞外网访问,但是电信这款光猫DMZ不能用让我很愁,后来经过一番了解可以让光猫只负责光数转换,剩下的事情交给路由,但是要把光猫设置成桥接模式这个光猫比较特殊不需要进入超级管理员只需要下面这个链接:http://192.168.1.1:8080/bridge_route.gch会出现这个页面,点击桥接复原就行,我是已经点过了,所以置灰了。…

    2022年10月8日
  • 什么是大数据,大数据的处理流程,主要分为哪几步?[通俗易懂]

    一、大数据是什么?大数据,bigdata,《大数据》一书对大数据这么定义,大数据是指不能用随机分析法(抽样调查)这样捷径,而采用所有数据进行分析处理。这句话至少传递两种信息:1、大数据是海量的数据2、大数据处理无捷径,对分析处理技术提出了更高的要求二、大数据的处理流程下图是数据处理流程:1、底层是数以千亿计的数据源,数据源可以是SCM(供应链数据),4PL(物流数据),CRM(客…

    2022年4月11日
  • Mysql 8.0解压版下载安装及配置教程

    Mysql 8.0解压版下载安装及配置教程首先声明,这里是Mysql8.0.27版本、64位操作系统解压版mysql的下载及安装配置及修改初始密码。如果是其他版本的mysql安装,可以自行查找其他方法,记住搜索的时候最好加上是什么版本的,因为不同版本的mysql安装的时候有些命令是不同的,例如,mysql5.7的就搜索mysql5.7安装。话不多说,接下来就是我的mysql8.0.27版本的教程了。1.下载打开下载地址:https://dev.mysql.com/downloads/mysql/,找到箭头中的文件https:/

    2022年5月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号