java逻辑删除_MybatisPlus中的删除和逻辑删除及区别介绍

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

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

删除又分为逻辑删除和物理删除,那么它们有什么区别呢?

物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据。

逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录。

在我们日常开发中,为了保留数据,经常会使用逻辑删除的方式进行数据删除,下面我们就来看看物理删除与逻辑删除怎么实现的吧

首先假设我有这样一张表

57140854381446c58e021dbe2982c18f.png

实体类:

package com.atguigu.mybatis_plus.entity;

import java.util.Date;

import com.baomidou.mybatisplus.annotation.FieldFill;

import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableField;

import com.baomidou.mybatisplus.annotation.TableId;

import com.baomidou.mybatisplus.annotation.TableLogic;

import lombok.Data;

@Data

public class User {

@TableId(type = IdType.AUTO)

private Long id;

private String name;

private Integer age;

private String email;

@TableField(fill = FieldFill.INSERT)

private Date createTime;

// @TableField(fill = FieldFill.UPDATE)

@TableField(fill = FieldFill.INSERT_UPDATE)

private Date updateTime;

}

userMapper接口:

package com.atguigu.mybatis_plus.mapper;

import com.atguigu.mybatis_plus.entity.User;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

// 继承BaseMapper后UserMapper就具有了CRUD功能

public interface UserMapper extends BaseMapper{

}

一、物理删除

1、根据id删除记录

@Test

public void testLogicDelete() {

int count = userMapper.deleteById(1L); // 删除id为1的数据

System.out.println(“受影响的行数”+count);

}

2、批量删除

@Test

public void testDeleteBatchIds() {

int result = userMapper.deleteBatchIds(Arrays.asList(2, 3, 4)); // 删除id为2,3,4的数据

System.out.println(result);

}

结果:

6fcf11dfcb84a8d77204083d7d2f525a.png

物理删除比较简单,接下来我们看看逻辑删除怎么实现吧!

二、逻辑删除

(1)数据库修改,添加 deleted字段

f57a5e68c4738e7cd3b4e5d03e920481.png

(2)实体类修改,添加deleted 字段,并加上 @TableLogic 注解

/*

加@TableLogic的情况下,程序内部会将delete语句变为update语句

实际上我们写的代码并不需要做出什么改变

*/

@TableLogic

private Integer deleted;

(3)测试

/**

* 逻辑删除

*/

@Test

public void testLogicDelete() {

int count = userMapper.deleteById(5L);

System.out.println(“受影响的行数”+count);

}

结果:

1b9c6b9d53e2709eb65662739dc390f2.png

2033d224c24c0d18f205de30742af650.png

测试后发现,数据并没有被删除,deleted字段的值由0变成了1

测试后分析打印的sql语句,是一条update

注意:被删除前,数据的deleted 字段的值必须是 0,才能被选取出来执行逻辑删除的操作

(5)测试逻辑删除后的查询,MyBatis Plus中查询操作也会自动添加逻辑删除字段的判断

@Test

public void testSelect() {

List users = userMapper.selectList(null); // 查询所有记录

users.forEach(System.out::println); // 遍历输出

}

结果:

b270db49b1c18b5416224d051d46410c.png

总结

到此这篇关于MybatisPlus中的删除和逻辑删除及区别介绍的文章就介绍到这了,更多相关MybatisPlus删除和逻辑删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

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

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

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


相关推荐

  • 整理了十五道为数不多的tomcat面试题,错过就没了!

    整理了十五道为数不多的tomcat面试题,错过就没了!当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)在servlet注册时加上如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

    2022年6月6日
    29
  • JWT单点登录代码实现(Demo详解)

    JWT单点登录代码实现(Demo详解)你好我是辰兮,很高兴你能来阅读,本篇给你介绍JWT单点登录的代码实现,后续会进一步分享源码的学习,献给初学者,共同成长,家一起进步。文章目录一、SSO概念二、JWT单点登录步骤一、SSO概念单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。阿里系的淘宝和天猫,很明显地我们可以知道这是两个系统,但是你在使用的时候,登录了天猫,淘宝也会自动登录。简述:当你成.

    2022年5月22日
    43
  • 不用go-(xxoo)agent的也有可能是程序员

    不用go-(xxoo)agent的也有可能是程序员记得是去年某个时候,在一个群里问大家是怎么翻(什么)墙的,发现很多人是用go-(xxoo)agent的,而我当时完全没听说过go-agent,因为我已经N多年不翻(什么)墙了,于是,有人就说:“连go-(xxoo)agent都没用过你还是程序员吗?”说实话,我也不希望我是程序员啊!可我真的没用过go-(xxoo)agent啊!想起我一位前同事,工作很多年了,却从来没用过linux!(也不知道他

    2022年7月17日
    21
  • Ubuntu 18.04 浏览器安装flash[通俗易懂]

    flash官网(注意下载和系统浏览器相对应的包)PPAPI:供Opera(15以上)、Chromium(开源谷歌)浏览器使用NPAPI:适用于FireFox(火狐)、Safari(苹果)、Opera(欧朋,12.17版以下)然后解压:tar-zxvfflash_player_npapi_linux.x86_64.tar.gz复制:sudocplibflashplay…

    2022年4月12日
    67
  • 微信公众平台接口调试工具

    微信公众平台接口调试工具微信公众平台为公众号开发者提供了网页版的接口调试工具,开发者可以直接在网页中调用对应的接口,比如获取access_token接口,创建菜单接口,发送消息接口等等。 先看一下界面,访问:http://mp.weixin.qq.com/debug/可以看到如下界面: 一、接口类型:因为微信公众号接口比较多,所以这里进行了分类,包括:基础支持、向用户发送消息、用户管理、自定义…

    2022年6月23日
    25
  • 回收测试JInternalFrame「建议收藏」

    回收测试JInternalFrame「建议收藏」2019独角兽企业重金招聘Python工程师标准>>>…

    2022年6月5日
    23

发表回复

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

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