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

这篇文章主要介绍了MybatisPlus中的删除和逻辑删除的相关知识,删除又分为逻辑删除和物理删除,那么它们有什么区别呢?在本文给大家详细介绍,感兴趣的朋友跟随小编一起看看吧

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

在这里插入图片描述

实体类:

 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); }

结果:

在这里插入图片描述

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

二、逻辑删除

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

在这里插入图片描述

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

 /* 加@TableLogic的情况下,程序内部会将delete语句变为update语句 实际上我们写的代码并不需要做出什么改变 */ @TableLogic private Integer deleted;

(3)测试

 /** * 逻辑删除 */ @Test public void testLogicDelete() { int count = userMapper.deleteById(5L); System.out.println("受影响的行数"+count); }

结果:

在这里插入图片描述
在这里插入图片描述

  • 测试后发现,数据并没有被删除,deleted字段的值由0变成了1
  • 测试后分析打印的sql语句,是一条update
  • 注意:被删除前,数据的deleted 字段的值必须是 0,才能被选取出来执行逻辑删除的操作

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

 @Test public void testSelect() { List users = userMapper.selectList(null); // 查询所有记录 users.forEach(System.out::println); // 遍历输出 }

结果:

在这里插入图片描述

总结

以上就是MybatisPlus中的删除和逻辑删除及区别介绍的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java