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

目录
  • 一、引言
  • 二、具体实现
    • 步骤一:首先我们需要配置未删除、已删除分别标识的状态码是什么,这里采用的yml格式。
    • 步骤二:在实体类对应的字段上加上注解@TableLogic即可。
    • 步骤三:测试测试,现在我们测试通过ID来删除某一个用户的时,看看执行的SQL语句是UPDATE了。
  • 三、使用注意细节

一、引言

之前小编讲了MP从入门到核心功能的使用,接下来这几天小编会把MP在实际项目中,一些常用的高级功能给记录一下。

高级功能分为:逻辑删除、自动填充、乐观锁插件、性能分析插件、多租户SQL解析器、动态表名SQL解析器、SQL注入器

今天先来说说在MP中如何使用逻辑删除,逻辑删除小编就不过多介绍了,顾名思义就是通过逻辑判断的手段表示该条数据已删除。

二、具体实现

删除功能是项目中经常见到的需求,比如需要删除某一件商品,删除一个订单,但往往不会把实际数据删除,而是选择逻辑删除来实现。

小编拿用户举例子,用户表中有一个is_delete字段标识该用户是否被删除,0 表示未删除 1 表示已删除。

步骤一:首先我们需要配置未删除、已删除分别标识的状态码是什么,这里采用的yml格式。

mybatis-plus:
  global-config:
    db-config:
      # 1 代表已删除,不配置默认是1,也可修改配置
      logic-delete-value: 1
      # 0 代表未删除,不配置默认是0,也可修改配置
      logic-not-delete-value: 0

步骤二:在实体类对应的字段上加上注解@TableLogic即可。

/**
 * <p>
 * 用户
 * </p>
 *
 * @author IT贱男
 * @since 2019-06-14
 */
@Data
@TableName("sys_user")
public class User extends Model<User> implements Serializable {
 
    private static final long serialVersionUID=1L;
 
    /**
     * 主键id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
 
    // .... 其他字段省略
 
    /**
     * 是否删除
     */
    @TableLogic
    private String isDelete;
 
}

步骤三:测试测试,现在我们测试通过ID来删除某一个用户的时,看看执行的SQL语句是UPDATE了。

    @Test
    public void delete() {
        int i = userMapper.deleteById(1);
        System.out.println(i);

    }

DEBUG==>  Preparing: UPDATE sys_user SET is_delete='1' WHERE id=? AND is_delete='0' 
DEBUG==> Parameters: 1(Integer)
DEBUG<==    Updates: 1

三、使用注意细节

细节一:当我们使用MP逻辑删除的功能之后,比如执行查询、修改的方法,MP会为我们自动加上未删除的条件。自定义sql除外

    @Test
    public void select(){
        List<User> users = userMapper.selectList(Wrappers.<User>lambdaQuery().eq(User::getAge, 18));
        users.forEach(System.out::println);
    }
 
    @Test
    public void update(){
        User user = new User();
        user.setEmail("Test@email.com");
        
        int update = userMapper.update(user, Wrappers.<User>lambdaQuery().eq(User::getAge, 18));
        System.out.println(update);
    }

DEBUG==>  Preparing: SELECT id,login_name,name,password,email,salt,sex,age,phone,user_type,status,organization_id,create_time,is_delete FROM sys_user WHERE is_delete='0' AND age = ? 
DEBUG==> Parameters: 18(Integer)
DEBUG<==      Total: 0

DEBUG==>  Preparing: UPDATE sys_user SET email=? WHERE is_delete='0' AND age = ? 
DEBUG==> Parameters: Test@email.com(String), 18(Integer)
DEBUG<==    Updates: 0

细节二:当我们查询数据时,不希望查询标识是否删除的字段,我们可以通过如下方式快速解决。当然还可以使用Wrapper中的select表达式来排除某些查询字段,只是通过注解的方式更加方便。

    /**
     * 是否删除
    */
    @TableLogic
    @TableField(select = false)
    private String isDelete;

到此这篇关于MyBatis-Plus实现逻辑删除的示例代码的文章就介绍到这了,更多相关MyBatis-Plus 逻辑删除内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mybatis-plus3.4.0逻辑删除报错的解决

    特别注意!!! 无论数据库字段,实体类字段,还是平时取其它字段名字时候,或者方法这些名字,一定不能和关键字重名,因为这样可能出现一些让人无法看出的错误 在进行mybatis-plus逻辑删除字段时候,我在数据库定义了delete字段定义为int类型,默认值是0,然后又在实体类中定义了这个字段delete并且在实体类的这个字段上面添加了注解@TableLogic,并且在application.properties中开启.(我使用的是3.4.0) 根据官方文档,在3.4.0版本中只需要以上两个步骤即

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

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

  • mybatis-plus 通用字段自动化(如逻辑删除和更新时间等)

    一般来说某些项目比较规范的情况下,大多数表都会有逻辑删除字段和通用字段,例如更新时间,创建时间,更新人,创建人等等,但是在代码开发上会产生很多冗余的代码,逻辑删除的话,自己写比较繁琐,而且容易有遗漏逻辑. 本来打算自己写切面去实现,偶然发现mybatis-plus已经帮封装实现了,试了一下,很好用,所以分享一下. 逻辑删除 逻辑删除的意思就是某些业务表,在用户删除某条数据的时候,不真正删除,而是将此数据某字段改成类似"已删除",而查询语句.更新语句等会忽略此条被逻辑删除的数据. 这里就

  • 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

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

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

  • 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之逻辑删除的实现

    特别是互联网项目,对于数据一般是不能删除的(涉及到后面的数据分析),这就涉及到逻辑删除.所谓逻辑删除指的是数据并不是真正的删除,只是改数据表对应数据的状态(数据表中通常有一列叫delFlag,以此标识正常状态或删除状态).逻辑删除一般都是更新操作,但写大量更新方法无疑是增加代码量,MyBatis-Plus又是如何实现逻辑删除的呢?其实很简单一共两步. 一.配置文件配置 mybatis-plus: global-config: db-config: logic-delete-value: 1 #

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

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

  • SpringBoot+MyBatis+AOP实现读写分离的示例代码

    目录 一. MySQL 读写分离 1.1.如何实现 MySQL 的读写分离? 1.2.MySQL 主从复制原理? 1.3.MySQL 主从同步延时问题(精华) 二.SpringBoot+AOP+MyBatis实现MySQL读写分离 2.1.AbstractRoutingDataSource 2.2.如何切换数据源 2.3.如何选择数据源 三 .代码实现 3.0.工程目录结构 3.1.引入Maven依赖 3.2.编写配置文件,配置主从数据源 3.3.Enum类,定义主库从库 3.4.ThreadL

  • SpringBoot mybatis 实现多级树形菜单的示例代码

    一.前言 iview-admin中提供了 v-org-tree这么一个vue组件可以实现树形菜单,下面小编来提供一下在element-ui中的使用教程(项目见:https://github.com/lison16/v-org-tree) 小编集成了el-dropdown下拉菜单(鼠标左击显示菜单),和右击自定义菜单,两种方式,效果图如下: 二.使用教程 (1)安装依赖 npm install clipboard npm install v-click-outside-x npm install

  • Mybatis Plus 实现批量插入的示例代码

    目录 一. 添加依赖 二. 继承默认方法注入 三. 在 MybatisPlusConfig 配置文件中注入 Bean 四. 扩展自带 BaseMapper 五. 业务层面实现 Mybatis Plus 的 IService 接口中提供了批量插入的方法,然而,它的内部实现逻辑竟然是这样的: 居然是循环单条插入?!逗人玩嘛,好吧,自己动手,丰衣足食. 一. 添加依赖 <!--mybatis plus extension,包含了mybatis plus core--> <dependency&

  • git中submodule子模块的添加、使用和删除的示例代码

    背景 项目中经常使用别人维护的模块,在git中使用子模块的功能能够大大提高开发效率. 使用子模块后,不必负责子模块的维护,只需要在必要的时候同步更新子模块即可. 本文主要讲解子模块相关的基础命令,详细使用请参考man page. 子模块的添加 添加子模块非常简单,命令如下: git submodule add <url> <path> 其中,url为子模块的路径,path为该子模块存储的目录路径. 执行成功后,git status会看到项目中修改了.gitmodules,并增加了一

  • springboot整合Mybatis、JPA、Redis的示例代码

    引言 在springboot 项目中,我们是用ORM 框架来操作数据库变的非常方便.下面我们分别整合mysql ,spring data jpa 以及redis .让我们感受下快车道. 我们首先创建一个springboot 项目,创建好之后,我们来一步步的实践. 使用mybatis 引入依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-

  • asp批量添加修改删除操作示例代码

    核心代码: <title>asp批量添加修改删除操作示例</title> <% if request.Form("op")="update" then'表单提交 ids=request.Form("ids") if ids<>"" then response.Write "要删除的数据id集合:"&ids&"<br>"

  • spring boot实现软删除的示例代码

    本文开发环境:spring-boot:2.0.3.RELEASE + java1.8 WHY TO DO 软删除:即不进行真正的删除操作.由于我们实体间的约束性(外键)的存在,删除某些数据后,将导致其它的数据不完整.比如,计算机1801班的教师是张三,此时,我们如果把张三删除掉,那么在查询计算机1801班时,由于张三不存了,所以就会报EntityNotFound的错误.当然了,在有外键约束的数据库中,如果张三是1801班的教师,那么我们直接删除张三将报一个约束性的异常.也就是说:直接删除张三这个

  • vue+element的表格实现批量删除功能示例代码

    最近写了一个批量删除功能,遇到了不少坑,特此记录一下 表格的代码如下 复制代码 代码如下: <el-table @row-click="handleCurrentChange" @selection-change="selsChange" ref="table" :data="pageData" stripe :default-sort="{prop: 'createAt', order: 'descendin

  • java数组遍历 删除remove(示例代码)

    废话不多说,直接上代码 复制代码 代码如下: package com.b; import java.util.ArrayList; //数组遍历删除,添加 public class Core2 {     private String name;     private int num;     private String color; public Core2() {     } public Core2(String a, int b, String c) {         name =

随机推荐