MyBatis-Plus的物理删除和逻辑删除(使用场景)

物理删除:真实删除,将数据从数据库中删除,删除后查询不到被删除的数据

逻辑删除:假删除,方便删除之后的数据恢复
在表中添加一个status字段,作为删除的标准,每次删除时,修改标志位,0代表没有删除,1代表删除
被删除记录的status字段被修改为“被删除状态”(1),删除后还可以查询到数据

逻辑删除的使用场景
1.需要进行数据恢复
2.有关联数据,不便删除

# mysql
//测试逻辑删除
status int null default null
# 实体类
//实现逻辑删除
@TableLogic
@TableField(fill=FieldFill.INSERT)   //为了方便测试
private Integer status;
# MpConfig配置类
//status在添加时自动填充默认为0,未被删除状态(1是被删除状态)
this.setFieldValByName("status",0,metaObject);
# Test测试类

//先添加测试数据
@Test
public void testAdd(){
	User user=new User();
	//没有设置id属性主键自增长,但mybatis-plus会使用主键策略自动生成id值
	user.setName("wangwu");
	user.setAge(18);
	user.setEmail("licy@163.com");
	int insert=userMapper.insert(user);
	System.out.println(insert);
}

//再测试逻辑删除
//在表中添加一个status字段,作为删除的标准,每次删除时,修改标志位,0代表没有删除,1代表删除
//UPDATE user SET status=1 WHERE id=? AND status=0 查询条件有一个status=0,即查询的都是没有被删除过的记录,被删除过的记录就不会被查询出来了
@Test
public void testDeleteByLogic(){
	int rows=userMapper.deleteById(1441596779656179713L);     //在做了逻辑删除的配置后,再使用id进行删除,执行的语句变成了修改id=?并且status为0的记录,如果status原来就是1(被删除过了),也不会再被删除,
	System.out.println(rows);
}

先添加测试数据

再测试逻辑删除

到此这篇关于MyBatis-Plus的物理删除和逻辑删除(使用场景)的文章就介绍到这了,更多相关MyBatis Plus物理删除和逻辑删除内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解MyBatisPlus逻辑删除与唯一索引冲突问题

    1.问题背景: 在开发中,我们经常会有逻辑删除和唯一索引同时使用的情况.但当使用mybatis plus时,如果同时使用逻辑删除和唯一索引,会报数据重复Duplicate entry的问题. 举个例子: 原来数据库结构: 这里location_id是唯一索引 CREATE TABLE `eam_location` ( `id` int(11) NOT NULL AUTO_INCREMENT, `location_id` varchar(50) UNIQUE NOT NULL COMMENT '位

  • MybatisPlus中的删除和逻辑删除及区别介绍

    删除又分为逻辑删除和物理删除,那么它们有什么区别呢? 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据. 逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为"被删除状态",之后在数据库中仍旧能看到此条数据记录. 在我们日常开发中,为了保留数据,经常会使用逻辑删除的方式进行数据删除,下面我们就来看看物理删除与逻辑删除怎么实现的吧 首先假设我有这样一张表 实体类: package com.atguigu.mybatis_plus.entity; import

  • MybatisPlus实现逻辑删除功能

    逻辑删除 你有没有见过某些网站进行一些删除操作之后,你看不到记录了但是管理员却能够查看到.这里就运用到了逻辑删除. 什么是逻辑删除? 逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除标识(deleted)或者说是状态字段(status)做修改操作.比如0是未删除,1是删除.在逻辑上数据是被删除的,但数据本身依然存在库中. 对应的SQL语句: update user set deleted=1 where id =1 and deleted=0 update

  • mybatis-plus getOne和逻辑删除问题详解

    1.getOne 如果查询出的结果有多个,这时候会抛异常 这样就不用每次getOne的Wrapper后面还跟last("limit 1") 2.@TableLogic 就不用每次list查询的时候跟上 .eq("deleted",false)了 PS:下面再次强调下Mybatis-Plus中的逻辑删除 1. 需要在删除的字段上添加注解@TableLogic 2. 在配置文件中写上配置 mybatis-plus: global-config: db-config: l

  • springboot+mybatis-plus+oracle实现逻辑删除

    最近在做一个前后端分离的小项目,需要删除用户表的用户,但是用户再别的表做了外键,所以只能做成逻辑删除,一通百度查资料后得以实现: 1.用户实体类 package com.sie.demo.entity; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.

  • 关于mybatis-plus逻辑删除无效的问题

    添加如下注解value代表默认值delval代表删除时的值 /** * 是否删除 */ @TableLogic(value = "0", delval = "1") @TableField(value = "del_flag") private Boolean delFlag; 下图是配置全部代码(如您知道上一步配置该添加到哪里,那就请忽略下面的代码配置) import com.baomidou.mybatisplus.core.injector

  • MyBatis-Plus的物理删除和逻辑删除(使用场景)

    物理删除:真实删除,将数据从数据库中删除,删除后查询不到被删除的数据 逻辑删除:假删除,方便删除之后的数据恢复 在表中添加一个status字段,作为删除的标准,每次删除时,修改标志位,0代表没有删除,1代表删除 被删除记录的status字段被修改为"被删除状态"(1),删除后还可以查询到数据 逻辑删除的使用场景 1.需要进行数据恢复 2.有关联数据,不便删除 # mysql //测试逻辑删除 status int null default null # 实体类 //实现逻辑删除 @Ta

  • Mybatis plus逻辑删除注解@TableLogic的使用

    目录 物理删除和逻辑删除 @TableLogic注解 @TableLogic注解默认值: @TableLogic注解用法 首先这个注解是苞米豆出品,也就是我们常说的mybatis升级版的东西. 简单讲一下这个注解的用法:我们在做数据库设计的时候有时候哪怕是删除也不会真的走物理删除,毕竟这样很多数据就不可恢复了,大多数时候很多删除都是用逻辑删除. 物理删除和逻辑删除 简单来说物理删除就是真的把这条数据从数据库删除了.而逻辑删除主要是把表中的某一个字段作为标识符,一般我们常用的会默认初始为0,当我们

  • MyBatis-Plus解决逻辑删除与唯一索引的问题

    目录 简介 问题复现 建库建表 代码 测试 解决方案 方案1:将字段设置为id(推荐) 方案2:将字段设置为当前时间(不推荐) 简介 说明 本文用示例介绍MyBatis-Plus如何解决逻辑删除与唯一索引的问题. 物理删除与逻辑删除 数据是很重要的,数据库里的数据在删除时一般不会用DELETE语句直接物理删除. 通常的做法是使用逻辑删除,也就是:新加一个标记是否删除的字段,在删除时不是真的删除,而是使用UPDATE语句将某个字段设置为删除状态.例如:"deleted_flag",0表示

  • MyBatis-Plus实现逻辑删除的示例代码

    目录 一.引言 二.具体实现 步骤一:首先我们需要配置未删除.已删除分别标识的状态码是什么,这里采用的yml格式. 步骤二:在实体类对应的字段上加上注解@TableLogic即可. 步骤三:测试测试,现在我们测试通过ID来删除某一个用户的时,看看执行的SQL语句是UPDATE了. 三.使用注意细节 一.引言 之前小编讲了MP从入门到核心功能的使用,接下来这几天小编会把MP在实际项目中,一些常用的高级功能给记录一下. 高级功能分为:逻辑删除.自动填充.乐观锁插件.性能分析插件.多租户SQL解析器.

  • Mybatis plus逻辑删除失败的BUG操作

    开发调试的时候发现Mybatis Plus的逻辑删除失效了,看了下配置文件发现没有问题,通过查看以下源码发现 逻辑删除需要注入的bean,查看这个bean的源码如下 查看其中一个实例的类的源码,如通过ID逻辑删除LogicDeleteById的源码,如下 mp在项目启动时预加载SQL是通过TableInfo中logicDelete字段判断是否开启逻辑删除的.然后让我们来看看mp内部是如何判断是否开启逻辑删除的. 先看如下源码 大概就是讲实体类中的字段进行循环映射数据库字段并封装到TableFie

  • MyBatis Plus逻辑删除和分页插件使用详解

    概要:Mybatis plus 官网链接 :https://mp.baomidou.com/guide/ 一.依赖配置: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x

  • mybatis plus实现分页逻辑删除

    一.分页 通过mybatis-plus实现分页,也是很简单,插件大法. 1.配置分页插件 把分页的插件也配置到统一的配置类里: @Configuration // 配置扫描mapper的路径 @MapperScan("com.pingguo.mpdemo.mapper") public class MpConfig { // 乐观锁插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { re

随机推荐