您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何分析MyBatis Plus中的逻辑删除
## 一、逻辑删除概述
逻辑删除(Soft Delete)是一种数据删除策略,它通过标记字段(如`is_deleted`)标识记录状态而非物理删除数据。MyBatis Plus作为MyBatis的增强工具,提供了开箱即用的逻辑删除功能,具有以下优势:
1. 保留历史数据便于审计
2. 支持数据恢复操作
3. 避免外键约束问题
## 二、配置逻辑删除
### 1. 数据库表设计
需添加状态标记字段,推荐使用:
```sql
ALTER TABLE user ADD COLUMN is_deleted TINYINT DEFAULT 0;
通过注解标识逻辑删除字段:
@Data
public class User {
@TableLogic
private Integer isDeleted; // 1-已删除 0-未删除
}
在application.yml
中配置:
mybatis-plus:
global-config:
db-config:
logic-delete-field: isDeleted # 全局逻辑删除字段
logic-delete-value: 1 # 删除值
logic-not-delete-value: 0 # 未删除值
MyBatis Plus通过以下机制实现逻辑删除:
SQL自动改写:
UPDATE user SET is_deleted = 1 WHERE id = ?
查询自动过滤: 自动添加未删除条件
SELECT * FROM user WHERE is_deleted = 0
Wrapper条件处理:
使用QueryWrapper
时自动忽略逻辑删除字段的条件冲突
// 方式1:使用@SqlParser注解
@SqlParser(filter = true)
public List<User> selectAll() {
return userMapper.selectList(null);
}
// 方式2:手动构造wrapper
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNull("is_deleted").or().eq("is_deleted", 0);
需注意条件拼接顺序,建议配置:
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new TenantLineInnerInterceptor());
interceptor.addInnerInterceptor(new LogicSqlInjector());
return interceptor;
}
ALTER TABLE user ADD UNIQUE KEY uk_name (name, is_deleted);
MyBatis Plus的逻辑删除功能通过简洁的配置即可实现,但需要注意实际业务中的特殊查询需求和数据一致性保障。建议在复杂场景中结合自定义SQL和拦截器进行扩展。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。