mybatisplus中逻辑删除有什么用
时间: 2024-02-29 17:55:25 浏览: 99
Mybatis-plus中的逻辑删除是指在数据库中不直接删除数据,而是在数据表中新增一个字段(如is_deleted),用于标识数据是否被删除。当执行删除操作时,只是将该字段的值进行修改,而不是将该数据从数据库中直接删除,这样做的好处是能够保留数据的完整性和可追溯性,方便后续的数据分析和处理。
逻辑删除的优点在于:可以减少数据的物理删除,避免误删重要数据,提高系统的可靠性;可以方便地进行数据恢复和审计;可以减轻数据库负担,提高数据库性能等。同时,逻辑删除也可以方便地实现历史数据查询和管理,符合数据保留的合规要求。
在Mybatis-plus中,逻辑删除可以通过注解@TableLogic实现。该注解可以标记在实体类的属性上,表示该属性为逻辑删除字段。同时,还可以通过配置全局逻辑删除属性、自定义逻辑删除 SQL 等方式灵活使用逻辑删除功能。
相关问题
mybatisplus的逻辑删除
MyBatisPlus提供了逻辑删除功能,它与物理删除有一些区别。在使用常规的逻辑删除方案时,我们需要考虑很多因素,为了提高效率,更推荐使用MyBatisPlus提供的逻辑删除方案。使用MyBatisPlus的逻辑删除功能非常简单。开启逻辑删除功能后,MyBatisPlus在删除、查询和更新时会自动加上条件deleted=0,即只对没有被删除的数据进行操作。在建表时,建议对deleted字段做默认限制,默认为0(未删除),插入数据时这个值可以不用设置。对于自己在xml文件中定义的接口方法,MyBatisPlus不会自动开启逻辑删除功能,需要我们自己维护逻辑删除功能。在查询时,MyBatisPlus会自动追加where条件过滤掉已删除的数据,并且使用wrapper.entity生成的where条件会忽略该字段。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
mybatisplus忽略逻辑删除
Mybatis Plus 支持逻辑删除,如果你希望忽略逻辑删除,可以使用以下两种方式:
1.使用原生的 Mybatis 查询语句,例如:
```java
List<User> userList = userMapper.selectList(new QueryWrapper<User>().lambda().eq(User::getName, "test").last("and deleted=0"));
```
在查询条件中加上 `last("and deleted=0")`,即可忽略逻辑删除字段。
2.使用自定义的全局配置,即在 `MybatisPlusConfig` 配置类中添加如下配置:
```java
@Configuration
public class MybatisPlusConfig {
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setSqlInjector(new LogicSqlInjector() {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
List<AbstractMethod> methodList = super.getMethodList(mapperClass);
methodList.removeIf(method -> method instanceof LogicDeleteByIdWithFill);
methodList.removeIf(method -> method instanceof LogicDeleteByMap);
methodList.removeIf(method -> method instanceof LogicDeleteBatchByIds);
return methodList;
}
});
return globalConfig;
}
}
```
这样可以自定义全局的 SQL 注入器,移除逻辑删除的相关方法。这种方式适用于所有的查询操作,而不仅仅是特定的查询。
阅读全文