java逻辑删除代码_MybatisPlus实现逻辑删除功能

本文介绍了如何在MybatisPlus中实现逻辑删除功能,包括设置全局和局部逻辑删除,通过`@TableLogic`注解配置删除标识字段,以及通过SQL更新操作演示逻辑删除的使用。还展示了如何在测试中查看删除效果和数据库中实际数据的状态。
摘要由CSDN通过智能技术生成

逻辑删除

你有没有见过某些网站进行一些删除操作之后,你看不到记录了但是管理员却能够查看到。这里就运用到了逻辑删除。

什么是逻辑删除?

逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除标识(deleted)或者说是状态字段(status)做修改操作。比如0是未删除,1是删除。在逻辑上数据是被删除的,但数据本身依然存在库中。

对应的SQL语句:

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

update 表名 set deleted = 1 where id = 1;语句表示,在该表中将id为1的信息进行逻辑删除,那么客户端进行查询id为1的信息,服务器就不会提供信息。倘若想继续为客户端提供该信息,可将 deleted 更改为 0 。

查找的话呢是通过加上条件deleted=0

select * from user where deleted=0

来自官网的配置,这里直接复制

第一步 添加全局配置

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)

第二步、在实体类上添加@TableLogic注解

@TableLogic

private Integer deleted;//对应的实体字段,实体字段需要根据数据库字段命名

这样就会在预编译sql中自动给这个字段设置的值就是全局配置设置的值

当然也可以设置局部生效 单个实体生效(不推荐)只需要在注解中添加

完整的实体示例

import com.baomidou.mybatisplus.annotation.TableLogic;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import java.io.Serializable;

import java.time.LocalDateTime;

@Data

@AllArgsConstructor

@NoArgsConstructor

public class User implements Serializable {

private long id;

private String name;

private long age;

private String email;

private long managerId;

private LocalDateTime createTime;

private LocalDateTime updateTime;

private long version;

@TableLogic(value = "0",delval = "1") //value表示逻辑未删除值,delval表示逻辑删除设置的值

private long deleted;

}

当然不建议这样操作,一般直接@TableLogic然后通过全局设置即可

测试代码,其中的传入的是主键 刘红雨的id

import org.junit.jupiter.api.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;

import top.huashengshu.demo.dao.UserMapper;

@SpringBootTest

@RunWith(SpringRunner.class)

class DemoApplicationTest {

@Autowired

UserMapper userMapper;

@Test

public void deleteTest(){

int rows = userMapper.deleteById(1094592041087729666L);

System.out.println("影响行数:"+rows);

}

}

执行结果:

4aad2c669d0df41c9750d73710b94b2a.png

查看表中数据:

b1ba977acfcc994de3f853f6dc1628f7.png

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

MybatisPlus提供了逻辑删除功能,可以通过在实体类添加一个标识删除的字段(如`is_deleted`)来实现。步骤如下: 1. 在实体类添加`@TableLogic`注解,并指定逻辑删除的值和未删除的值,如: ```java @Data public class User { private Long id; private String name; private Integer age; @TableLogic(value = "0", delval = "1") private Integer deleted; } ``` 上述代码,`@TableLogic`注解的`value`属性表示未删除的值,默认为`0`,`delval`属性表示删除的值,默认为`1`。 2. 在MybatisPlus的配置文件开启逻辑删除,如: ```java @SpringBootApplication @MapperScan("com.example.demo.mapper") public class DemoApplication { @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // 开启逻辑删除 paginationInterceptor.setSqlParser(new LogicSqlParser()); return paginationInterceptor; } public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 上述代码,通过`setSqlParser`方法将`LogicSqlParser`注入到`PaginationInterceptor`,开启逻辑删除功能。 3. 在Mapper接口继承`BaseMapper`,如: ```java public interface UserMapper extends BaseMapper<User> { } ``` 继承`BaseMapper`可以直接使用MybatisPlus提供的CRUD方法,包括逻辑删除的方法。 4. 使用逻辑删除的方法进行删除操作,如: ```java @Autowired private UserMapper userMapper; @Test public void testDelete() { int rows = userMapper.deleteById(1L); System.out.println(rows); } ``` 上述代码,使用`deleteById`方法进行逻辑删除,将id为1的记录的`is_deleted`字段值设置为`1`。 总结:通过在实体类添加`@TableLogic`注解,并在MybatisPlus的配置文件开启逻辑删除功能,即可使用MybatisPlus提供的逻辑删除方法进行删除操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值