删除数据可以分为两种
- 物理删除:从数据库中直接删除,不保留。
- 逻辑删除:修改数据的某个字段,使其表示为已删除状态,而非删除数据,保留该数据在数据库中,但是查询时不显示该数据(查询时过滤掉该数据)。
案例(局部配置)
数据库中增减deleted字段
默认值为0
pojo实体类中添加属性
注解中value的值代表没删除状态下该值为多少,dval的值代表删除状态下该值为多少(可以自定义)。
@TableLogic(value = "0", delval = "1") //逻辑删除 全局配置在yml配置
private Integer deleted;
测试
@Autowired
private UserMapper userMapper;
@Test
void test1() {
userMapper.deleteById(1L);
}
看到如下表示成功,没开mybatisplus日志的可以取数据库查看:
可以看到:deleted的值以经为1,代表此数据已经逻辑删除了,我们来试一下查询。
@Test
void test2() {
userMapper.selectList(null).forEach(System.out::println);
}
对比数据库可以发现,select查询并未将deleted值为1的数据查询出来。
全局配置
下面是开启日志外加全局逻辑删除配置
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
banner: false
db-config: # 配置全局逻辑删除
logic-delete-value: 1
logic-not-delete-value: 0
logic-delete-field: deleted