mybatis-plus实现逻辑删除(详细!)

news/2024/10/28 20:18:05/

文章目录

  • 什么是逻辑删除?
  • 为什么用到逻辑删除?
  • 在springboot使用Mybatis-Plus提供的逻辑删除
    • 1、在application.yml配置
    • 2、 实体类字段上加上@TableLogic注解
    • 演示

什么是逻辑删除?

逻辑删除的本质是修改操作,并不是真正的删除,而是在表中将对应的是否删除标识(delete_flag)做修改操作。比如0是未删除,1是删除。在逻辑上数据是被删除的,但数据本身依然存在库中。
逻辑删除sql语句为:

update user set deleted=1 where id = 1 and deleted=0

这种设计,后端每次向数据库查询数据时,只查deleted=0(未删除)的数据。拿上面sql举例,那么客户端进行查询id为1的信息,服务器就不会提供信息。
查询sql为:

select id,name,deleted from user where deleted=0

为什么用到逻辑删除?

比如:在一家销售公司中,有两个员工在一月份离职了,后台管理人员在办离职时,如果直接将数据库中与这两个员工相关的信息删除了,那么当经理想要看一月份的销售记录的时候,只能看到部分销售记录,销售金额对不上。这种情况肯定是不允许发生的
如下图:
本来一月总共销售了17,000,00元,结果删除后只剩下了5,000,00。
在这里插入图片描述
只需要在员工工号后面加delete_flag字段,用于标记是否被删除即可。

在springboot使用Mybatis-Plus提供的逻辑删除

字段类型支持说明:
支持所有数据类型(推荐使用 Integer,Boolean,LocalDateTime)
如果数据库字段使用datetime,逻辑未删除值和已删除值支持配置为字符串null,另一个值支持配置为函数来获取值如now()

1、在application.yml配置

mybatis-plus:global-config:db-config:logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)logic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

2、 实体类字段上加上@TableLogic注解

@Data
public class UserPO implements Serializable {@TableId(type = IdType.ASSIGN_ID)private Long id;private String userName;private String password;private String nickName;@TableLogicprivate int delFlag;}

演示

数据库t_user表中数据:
在这里插入图片描述
UserPOMapper:

@Mapper
public interface UserPOMapper extends BaseMapper<UserPO> {
}

IUserService:

public interface IUserService extends IService<UserPO> {
}

IUserServiceImpl:

@Service
public class IUserServiceImpl extends ServiceImpl<UserPOMapper, UserPO> implements IUserService {
}

Controller:

 @RequestMapping("/open/del")public ResultUtil del(UserParam userParam){UserPO one = iUserService.getOne(new LambdaQueryWrapper<UserPO>().eq(UserPO::getUserName, userParam.getUserName()));boolean b = iUserService.removeById(one);System.out.println(b);return ResultUtil.success(b);}

ResultUtil:

@Data
public class ResultUtil {private String code;private String message;private  Object data;public static  ResultUtil success(Object data){ResultUtil resultUtil = new ResultUtil();resultUtil.setCode("200");resultUtil.setMessage("请求成功");resultUtil.setData(data);return resultUtil;}
}

浏览器请求:
在这里插入图片描述
数据库t_user表中数据:
可以看到,加了@TableLogic注解的字段对应的数据库字段,由0(未删除)改为1(已删除)
在这里插入图片描述


http://www.ppmy.cn/news/97768.html

相关文章

react项目中:设置代理setupProxy.js文件以后,项目文件在浏览器显示不开

原版文件 const proxy require(http-proxy-middleware)module.exports function (app) {app.use(// 不能遇到什么东西都走代理proxy(/api1, { //遇见/api1前缀的请求&#xff0c;就会触发该代理配置target: http://localhost:5000, //请求转发给谁changeOrigin: true,//控制…

MongoDB入门

mongodb与sql术语对应关系 SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引 对应关系图例

Flume实践

1 NetCat方式 ]# ./bin/flume-ng agent --conf conf--conf-file ./conf/flume_netcat.conf --name a1 -Dflume.root.loggerINFO,console [rootmaster ~]# yum -y intalll telnet 发数据&#xff1a; ]# telnet master 44444 数据接收&#xff0c;是在终端上接收的&#xff0…

腾讯云服务器可用区是什么意思?可用区详细说明

腾讯云服务器可用区什么意思&#xff1f;可用区&#xff08;Zone&#xff09;是指腾讯云在同一地域内电力和网络互相独立的物理数据中心&#xff0c;一个可用区故障不会影响另一个可用区的正常运行&#xff0c;所以可用区用于构建高容灾、高可靠性应用。腾讯云服务器网来详细说…

解密高并发场景下的集合类问题,让程序更高效稳定!

大家好&#xff0c;我是小米&#xff0c;一个热爱技术分享的小伙伴。在日常开发中&#xff0c;我们经常会使用集合类来处理数据&#xff0c;但在高并发场景下&#xff0c;集合类可能会遇到一些线程安全的问题。今天&#xff0c;我们就来探讨一下集合类在高并发中是如何解决问题…

DPDK系列之十八DPDK网络虚拟化

一、NFV和VNF Virtual Network Function&#xff08;VNF&#xff09;虚拟网络功能&#xff0c;Network Function Virtualization&#xff08;NFV&#xff09;&#xff0c;网络功能虚拟化。VNF是NFV的重要组成部分之一。那么NFV是什么&#xff1f;其实很简明了&#xff0c;重点…

mysql详细优化建议(谈谈你的SQL优化经验)

sql语句规范 MySQL在Linux系统下数据库名&#xff0c;表名&#xff0c;存储过程名&#xff0c;函数名称&#xff0c;触发器名称等区分大小写&#xff0c;列名不区分大小写&#xff0c;原因是这些操作系统下文件名称区分大小写。 MySQL在Windows系统下全部不区分大小写&#x…

一起学AI系列:博客目录索引

一起学AI&#xff1a;系列博客目录索引 本文汇总更新研究学习AI的一些笔记心得&#xff0c;不当之处&#xff0c;还望多指正&#xff0c;一起讨论交流。 目录索引 技术路线 一起学AI&#xff1a;入门AI技术路径及信源总览 入门知识 一起学AI&#xff1a;过去以及当下一起学A…