逻辑删除一般是在数据库中添加这样一个字段,默认情况下值为0,一旦进行删除操作则将其值变1,这样这条数据在数据库中仍然存在,但是前端查询无法查到结果。
数据库表中添加字段has_delete设置其默认值为0,表示没有进行逻辑删除。1,表示已经进行了逻辑删除。
类属性上添加@TableLogic注解
我们以id为14的Tom为例
test查询的代码
//selectByMap可以一次查多条数据,也可以只拿确切的一条数据
HashMap<String, Object> map = new HashMap<>();
map.put("stu_name","tom");
map.put("age",63);
List<Students> students1 = studentsMapper.selectByMap(map);
for (Students students2 : students1) {
System.out.println("students2 = " + students2);
}
查看执行的sql语句,发现mybatis-plus自动在条件上添加了has_delete=0的判断语句。
这时候是有查询结果的。
删除代码
@Test
void deleteWrap(){
QueryWrapper<Students> wrapper = new QueryWrapper<>();
wrapper.eq("stu_name","tom")
.eq("age",63);
int delete = studentsMapper.delete(wrapper);
System.out.println("delete = " + delete);
}
运行:删除操作这里变成了更新操作
返回结果为1
查看数据库发现has_delete参数变为1
再一次进行查询,因为mybatis-plus自动拼接条件has_delete=0因此结果应该为0
也就是查询不到数据了。