返回

Mybatis-Plus的一键升级:助力数据库操作,如虎添翼

后端

MyBatis-Plus 逻辑删除记录操作人,一键升级,轻松解决痛点!

一、MyBatis-Plus 的逻辑删除功能

MyBatis-Plus 是一款出色的持久层框架,其逻辑删除功能允许我们软删除数据,即在数据库中标记数据为已删除,同时保留数据本身。这样,既可以实现数据删除,又可以避免物理删除带来的不可逆操作。

public void deleteById(Long id) {
    LambdaQueryWrapper<T> wrapper = new LambdaQueryWrapper<T>()
        .eq(T::getId, id);
    logicDelete(wrapper);
}

二、痛点分析:无法记录操作人

然而,MyBatis-Plus 逻辑删除的一个痛点是无法记录执行删除操作的人员信息。这意味着当使用 removeById(1L) 方法逻辑删除数据时,数据库中只会标记数据已删除,而不会记录是谁执行了此操作。

public void removeById(Long id) {
    int rowCount = baseMapper.deleteById(id);
    if (rowCount > 0) {
        triggerDeleteEvent(id);
    }
}

三、解决方案:一键升级,轻松记录操作人

为了解决这个痛点,我们可以对 MyBatis-Plus 进行一键升级,以便在逻辑删除数据时自动记录操作人信息。

  1. 在实体类中添加操作人字段:
@TableField(value = "operator", fill = FieldFill.INSERT_UPDATE)
private String operator;
  1. 开启自动填充功能:
@Configuration
@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
public class MybatisPlusConfig {

    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
        return globalConfig;
    }
}
  1. 实现自动填充方法:
public class MyMetaObjectHandler extends InjectionMetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        setFieldValByName("operator", "system", metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        setFieldValByName("operator", "system", metaObject);
    }
}

通过这些步骤,我们可以轻松实现 MyBatis-Plus 在逻辑删除数据时自动记录操作人信息。

四、案例演示:一键升级后的逻辑删除

进行一键升级后,当使用 removeById(1L) 方法逻辑删除数据时,数据库中不仅会标记数据已删除,还会自动记录操作人信息。

public void deleteById(Long id) {
    LambdaQueryWrapper<T> wrapper = new LambdaQueryWrapper<T>()
        .eq(T::getId, id);
    logicDelete(wrapper);
}

此时,可以通过查询数据库中的 operator 字段,轻松获取执行删除操作的用户名。

SELECT operator FROM table_name WHERE id = 1;

五、一键升级的优势

  • 操作简单,一键升级即可实现功能。
  • 功能强大,支持自动填充操作人信息,满足不同需求。
  • 性能高效,不会影响数据库性能。
  • 安全可靠,增强数据安全性,便于追溯和审计。

结语

通过一键升级,我们可以轻松实现 MyBatis-Plus 在逻辑删除数据时自动记录操作人信息的功能,提升数据操作的便利性和安全性。希望本文对广大 MyBatis-Plus 用户有所帮助。

常见问题解答

  1. 升级后,是否会影响现有数据?
    不会,升级不会影响现有数据,只对后续逻辑删除操作生效。

  2. 是否可以自定义操作人填充规则?
    可以,在 MyMetaObjectHandler 中实现自定义填充方法。

  3. 一键升级是否需要修改代码?
    只需要在实体类中添加操作人字段,其他无需修改代码。

  4. 是否支持批量逻辑删除记录操作人?
    是的,批量逻辑删除也会自动记录操作人信息。

  5. 逻辑删除后,如何恢复数据?
    逻辑删除的数据仍然存在于数据库中,可以通过更新 is_deleted 字段为 false 来恢复。