MybatisPlus实现逻辑删除功能
逻辑删除
你有没有见过某些⽹站进⾏⼀些删除操作之后,你看不到记录了但是管理员却能够查看到。这⾥就运⽤到了逻辑删除。
什么是逻辑删除?
逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,⽽是在表中将对应的是否删除标识(deleted)或者说是状态字段(status)做修改操作。⽐如0是未删除,1是删除。在逻辑上数据是被删除的,但数据本⾝依然存在库中。
springboot其实就是spring对应的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 batisplus.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.st.context.SpringBootTest;
import st.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);
}
}
执⾏结果:
查看表中数据:
到此这篇关于MybatisPlus实现逻辑删除功能的⽂章就介绍到这了,更多相关MybatisPlus 逻辑删除内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。