前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java逻辑删除_MybatisPlus中的删除和逻辑删除及区别介绍

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

作者头像
全栈程序员站长
发布2022-09-05 10:19:38
1.7K0
发布2022-09-05 10:19:38
举报
文章被收录于专栏:全栈程序员必看

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

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

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

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

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

首先假设我有这样一张表

57140854381446c58e021dbe2982c18f.png
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
6fcf11dfcb84a8d77204083d7d2f525a.png

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

二、逻辑删除

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

f57a5e68c4738e7cd3b4e5d03e920481.png
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
1b9c6b9d53e2709eb65662739dc390f2.png
2033d224c24c0d18f205de30742af650.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
b270db49b1c18b5416224d051d46410c.png

总结

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档