Mybatis-Plus的一键升级:助力数据库操作,如虎添翼
2023-01-08 17:24:55
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 进行一键升级,以便在逻辑删除数据时自动记录操作人信息。
- 在实体类中添加操作人字段:
@TableField(value = "operator", fill = FieldFill.INSERT_UPDATE)
private String operator;
- 开启自动填充功能:
@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;
}
}
- 实现自动填充方法:
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 用户有所帮助。
常见问题解答
-
升级后,是否会影响现有数据?
不会,升级不会影响现有数据,只对后续逻辑删除操作生效。 -
是否可以自定义操作人填充规则?
可以,在MyMetaObjectHandler
中实现自定义填充方法。 -
一键升级是否需要修改代码?
只需要在实体类中添加操作人字段,其他无需修改代码。 -
是否支持批量逻辑删除记录操作人?
是的,批量逻辑删除也会自动记录操作人信息。 -
逻辑删除后,如何恢复数据?
逻辑删除的数据仍然存在于数据库中,可以通过更新is_deleted
字段为false
来恢复。