如何分析mybatis plus中的逻辑删除

发布时间:2021-12-09 10:26:03 作者:柒染
来源:亿速云 阅读:184
# 如何分析MyBatis Plus中的逻辑删除

## 一、逻辑删除概述

逻辑删除(Soft Delete)是一种数据删除策略,它通过标记字段(如`is_deleted`)标识记录状态而非物理删除数据。MyBatis Plus作为MyBatis的增强工具,提供了开箱即用的逻辑删除功能,具有以下优势:

1. 保留历史数据便于审计
2. 支持数据恢复操作
3. 避免外键约束问题

## 二、配置逻辑删除

### 1. 数据库表设计
需添加状态标记字段,推荐使用:
```sql
ALTER TABLE user ADD COLUMN is_deleted TINYINT DEFAULT 0;

2. 实体类配置

通过注解标识逻辑删除字段:

@Data
public class User {
    @TableLogic
    private Integer isDeleted; // 1-已删除 0-未删除
}

3. 全局配置(可选)

application.yml中配置:

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: isDeleted  # 全局逻辑删除字段
      logic-delete-value: 1         # 删除值
      logic-not-delete-value: 0     # 未删除值

三、实现原理分析

MyBatis Plus通过以下机制实现逻辑删除:

  1. SQL自动改写

    • 删除操作转为UPDATE语句
    UPDATE user SET is_deleted = 1 WHERE id = ?
    
  2. 查询自动过滤: 自动添加未删除条件

    SELECT * FROM user WHERE is_deleted = 0
    
  3. Wrapper条件处理: 使用QueryWrapper时自动忽略逻辑删除字段的条件冲突

四、特殊场景处理

1. 查询包含已删除数据

// 方式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);

2. 多租户场景

需注意条件拼接顺序,建议配置:

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new TenantLineInnerInterceptor());
    interceptor.addInnerInterceptor(new LogicSqlInjector());
    return interceptor;
}

五、注意事项

  1. 索引优化:建议为逻辑删除字段添加索引
  2. 唯一约束:需将逻辑删除字段纳入唯一索引
    
    ALTER TABLE user ADD UNIQUE KEY uk_name (name, is_deleted);
    
  3. 性能影响:大数据量查询时注意条件效率

六、总结

MyBatis Plus的逻辑删除功能通过简洁的配置即可实现,但需要注意实际业务中的特殊查询需求和数据一致性保障。建议在复杂场景中结合自定义SQL和拦截器进行扩展。 “`

推荐阅读:
  1. mybatis-plus getOne和逻辑删除问题详解
  2. mybatis-plus3.4.0逻辑删除报错如何解决

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mybatis-plus spring boot

上一篇:如何让百度收录GitHub Pages个人博客

下一篇:Spark怎么写HBASE

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》