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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java的常量

    java的常量JAVA变量与常量常量常量值常量常量的声明定义常量常量在c语言编程网中的定义是指在程序的整个运行过程中值保持不变的量。在这里要注意常量和常量值是不同的概念,常量值是常量的具体和直观的表现形式,常量是形式化的表现。这里体现出常量值这一定义,我认为的常量值就是值,具体的某一数值百度出来的常量是定义为两种意思:一是不可变的变量,也是最最最开始接触java知道的,二如上。平时所说的值指的是常量值,常量是不可变的变量(用final修饰的变量)常量值提到常量值不得不说一下计数法,八进制、十进制、十六进制所代

    2022年7月8日
    26
  • PHP代码审计入门学习过程

    PHP代码审计入门学习过程PHP代码审计学习过程:花了两周的时间在B站上看完了一个老师讲的代码审计课程,主要是通过实战的方式对一个CMS系统里面的漏洞进行讲解,一步一步的审计找出漏洞,对新手来说确实困难,要上手的话还是自己找网上一些简单的CMS或是代码审计靶场来练手。代码审计入门确实挺难的,大部分原理都没有学会,后续也要继续加深学习。进行代码审计必须要关注:1.敏感的函数和变量2.跟踪敏感函数和关键字参数传递过程。3.查找可控变量,一步一步的跟踪变量测传递过程。4.寻找敏感功能点,对功能点进行审计PH.

    2022年9月26日
    2
  • CSS3 transition的使用

    CSS3 transition的使用一、CSS3中transition的定义transition:propertydurationtiming-functiondelay;transition属性是一个简写属性,主要用于设置四个过渡属性: 值描述transition-property规定设置过渡效果的CSS属性的名称。transitio

    2022年7月13日
    19
  • 为什么不建议把数据库部署在 Docker 容器内?

    原文:https://www.toutiao.com/i6805798581971190276/ 近2年Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docke…

    2021年6月22日
    96
  • 百度文库免费下载文档代码

    $(".aside").remove();$("#doc#hd").remove();$(".crubms-wrap").remove();$(".user-bar").remove();$("#doc-header").remove();$(".reader-tools-bar-wrap").remove();$(".fix-searchbar-wra

    2022年4月13日
    52
  • pycharm如何缩进多行代码_pycharm整段代码缩进

    pycharm如何缩进多行代码_pycharm整段代码缩进pycharm多行代码缩进、左移在使用pycharm时,经常会需要多行代码同时缩进、左移,pycharm提供了快捷方式1、pycharm使多行代码同时缩进鼠标选中多行代码后,按下Tab键,一次缩进四个字符2、pycharm使多行代码同时左移鼠标选中多行代码后,同时按住shift+Tab键,一次左移四个字符…

    2022年8月25日
    2

发表回复

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

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