Skip to content

当前系统中逻辑删除的处理方式存在不一致性,部分采用手动SQL条件,部分可能遗漏,缺乏统一的自动化机制。 #99

@GitHub-lcb

Description

@GitHub-lcb

现状分析

当前实现方式

  1. 手动SQL条件:在mapper XML文件中手动添加 deleted_flag = #{deletedFlag} 条件
  2. 不统一:不同模块处理方式不一致,有些查询包含deleted_flag条件,有些不包含
  3. 易出错:依赖开发者手动添加条件,容易遗漏

具体表现

  • 系统管理模块(system):PositionMapper.xml、EmployeeMapper.xml等包含deleted_flag条件
  • 支持模块(support):FileMapper.xml、MessageMapper.xml、DictMapper.xml等不包含deleted_flag条件

技术可行性

系统已具备启用MyBatis-Plus逻辑删除的所有条件:

版本支持:MyBatis-Plus 3.5.12(支持逻辑删除功能)
字段存在:实体类中已有deletedFlag字段
缺少配置:未启用逻辑删除插件和相关配置

改进建议

方案一:启用MyBatis-Plus原生逻辑删除(推荐)

实施步骤:

  1. MybatisPlusConfig.java 中添加逻辑删除插件
  2. 在相关实体类中添加 @TableLogic 注解
  3. 在配置文件中添加逻辑删除全局配置

优势:

  • 统一自动化处理,无需手动添加SQL条件
  • 减少开发人员工作量和出错概率
  • 符合MyBatis-Plus最佳实践
  • 性能更好(框架层面优化)

配置示例:

// MybatisPlusConfig.java
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
    interceptor.addInnerInterceptor(new LogicDeleteInnerInterceptor());
    return interceptor;
}
// Entity类
@TableLogic
private Boolean deletedFlag;
# application.yaml
mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions