逻辑删除和物理删除的区别是:
逻辑删除是假的删除:意思是当数据删除了只是标记了不在前端不显示,数据还是存在数据库里没有被删除的
物理删除是真的删除:意思是真的使用了SQL语句执行删除,数据库没有这一条数据了。
物理删除:
//删除操作
@Test
public void testDeleteById(){
int i = userMapper.deleteById(1L);
System.out.println(i);
}
//批量删除
@Test
public void testDeleteBatchIds(){
int i = userMapper.deleteBatchIds(Arrays.asList(1L, 2L, 3L));
System.out.println(i);
}
逻辑删除的设置:
(1)数据库中添加deleted字段
2)实体类添加deleted字段
并加上@TableLogic注解和@TableField(fill = FieldFill.INSERT)
用于逻辑删除
@TableLogic
@TableField(fill = FieldFill.INSERT)
private Integer deleted;
(3)元对象处理器接口添加deleted的insert默认值
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("deleted", 0, metaObject);
}
(4)application.properties加入配置
此为默认值,如果你的默认值和mp默认的一样,该配置可无
# 逻辑删除配置
mybatis-plus.global-config.db-config.logic-delete-field=flag
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
(5)在MybatisPlusConfig中注册Bean
3.3.0之后的mp如果不配置则实体类的flag字段就是逻辑字段
3.1.1版本以上的mp不需要注册插件
/**
* 逻辑删除插件
* @return
*/
@Bean
public ISqlInjector injector(){
return new LogicSqlInjector();
}
(6)测试删除的方法
//删除操作 逻辑删除
@Test
public void testDeleteById(){
int i = userMapper.deleteById("1381186511252258818");
System.out.println(i);
}
测试结果:
执行了逻辑删除之后deleted变成了1