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<User>{
}
一、物理删除
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<User> users = userMapper.selectList(null); // 查询所有记录
users.forEach(System.out::println); // 遍历输出
}
结果:

总结
到此这篇关于MybatisPlus中的删除和逻辑删除及区别介绍的文章就介绍到这了,更多相关MybatisPlus删除和逻辑删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
一篇文章带你搞定SpringBoot不重启项目实现修改静态资源
这篇文章主要介绍了一篇文章带你搞定SpringBoot不重启项目实现修改静态资源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09
java(swing)+ mysql实现学生信息管理系统源码
这篇文章主要分享了java mysql实现学生信息管理系统的源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-11-11
SpringBoot用实体接收Get请求传递过来的多个参数的两种方式
本文主要介绍SpringBoot用实体接收Get请求传递过来的多个参数,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-04-04
基于Springboot+Netty实现rpc的方法 附demo
这篇文章主要介绍了基于Springboot+Netty实现rpc功能,在父项目中引入相关依赖结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-02-02


最新评论