在数据库中的删除分为逻辑删除和物理删除
- 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据
- 逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
物理删除
- 根据id删除记录
物理删除id为3的记录。
/**
* 测试根据id删除
*/
@Test
void testDeleteById(){
int result = userMapper.deleteById(3L);
System.out.println(result);
}
执行前:
执行后:
- 批量删除
/**
* 测试根据多个id删除
*/
@Test
void testDeleteByIds(){
int result = userMapper.deleteBatchIds(Arrays.asList(1, 2, 4, 5));
System.out.println(result);
}
执行前;
执行后:
- 简单的条件查询删除
/**
* 简单的条件删除
*/
@Test
void testDeleteByMapper(){
HashMap<String, Object> map = new HashMap<>();
map.put("name", "赵六");
map.put("age", 18);
int result = userMapper.deleteByMap(map);
System.out.println(result);
}
执行前:
执行后:
逻辑删除
逻辑删除的表中必须有一个表示该记录是否是逻辑删除的字段,一般为整形字段,1表示逻辑删除,0表示未被逻辑删除,在查询显示记录的时候我们就可以根据这个字段的值来判断是否显示这条记录了
- 在表中添加deleted字段
ALTER TABLE `user` ADD COLUMN `deleted` boolean
- 实体类添加deleted 字段
并加上 @TableLogic 注解 和 @TableField(fill = FieldFill.INSERT) 注解
@TableLogic
@TableField(fill = FieldFill.INSERT)
private Integer deleted;
- 元对象处理器接口添加deleted的insert默认值
@Override
public void insertFill(MetaObject metaObject) {
......
this.setFieldValByName("deleted", 0, metaObject);
}
- application.properties 加入配置
此为默认值,如果你的默认值和mp默认的一样,该配置可无
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
- 在 MybatisPlusConfig 中注册 Bean
3.1.0之后的版本此步可以忽略
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
- 测试逻辑删除
/**
* 测试根据id逻辑删除
*/
@Test
void testDeleteById(){
int result = userMapper.deleteById(1376824000902184961L);
System.out.println(result);
}
执行前:
执行后:
7. 测试逻辑删除后的查询
MyBatis Plus中查询操作也会自动添加逻辑删除字段的判断
/**
* 查询所有
*/
@Test
void testFindAll(){
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
执行结果: