一,需求描述
在 MyBatis Plus 中实现逻辑删除是一种常见的需求
逻辑删除,通常用于避免直接从数据库中物理删除数据,而是标记这些数据为“已删除”。
逻辑删除,可以通过在表中添加一个额外的字段(如 deleted
或 is_deleted
)来实现。
逻辑删除,当该字段为某个值时(例如1或者true),表示这条记录已被逻辑删除。
详细参考地址:/guide/
二,如何在 MyBatis Plus 中设置逻辑删除
下面是如何在 MyBatis Plus 中设置逻辑删除:
2.1 在实体类上添加 @TableLogic
注解:布尔类型
首先,需要在实体类中对应的字段上添加 @TableLogic
注解。
假设你使用的是布尔类型来标记删除状态,那么代码如下:
@Data
public class UserEntity {
private Long id;
private String name;
@TableLogic
private Boolean deleted;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2.2 在实体类上添加 @TableLogic
注解:整型
如果使用的是整型,可以使用 0
表示未删除,1
表示已删除,在实体类字段上加上@TableLogic注解
@Data
public class UserEntity {
private Long id;
private String name;
@TableLogic
private Integer deleted;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2.3 配置全局逻辑删除
接下来,在MyBatis Plus 配置类中启用全局逻辑删除。
需要在 MybatisPlusConfig
类中配置 GlobalConfig
的 dbConfig
,注意:配置是基于较旧的 MyBatis Plus 版本。
在最新版本中,需要使用不同的方式来配置全局逻辑删除。
通常是通过MybatisPlusConfig
中的CustomGlobalConfig
或者直接在mybatis-plus
配置类中设置。
@Configuration
@MapperScan("")
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
@Bean
public GlobalConfiguration globalConfiguration() {
GlobalConfiguration globalConfiguration = new GlobalConfiguration();
DbConfig dbConfig = new DbConfig();
dbConfig.setLogicDeleteValue(1); // 逻辑已删除值(默认为1)
dbConfig.setLogicNotDeleteValue(0); // 逻辑未删除值(默认为0)
globalConfiguration.setDbConfig(dbConfig);
return globalConfiguration;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
2.4 使用逻辑删除
现在,当你使用 MyBatis Plus 的 CRUD 方法查询数据时,它会自动过滤掉逻辑删除的记录。
同时,当你调用 removeById
或 remove
方法删除记录时,MyBatis Plus 会更新 deleted
字段而不是物理删除记录。
为了手动更新逻辑删除状态,你可以使用 update
方法结合条件查询:
UserEntity user = new UserEntity();
user.setId(id);
user.setDeleted(true); // 或者使用1
userMapper.updateById(user);
- 1
- 2
- 3
- 4