mybatisplus 关闭逻辑删除
时间: 2025-01-30 15:17:39 浏览: 125
### 关闭MyBatis-Plus中的逻辑删除功能
在MyBatis-Plus中,默认情况下可以启用逻辑删除来代替物理删除记录。为了关闭这一特性,可以通过配置全局策略或实体类的方式实现。
#### 方法一:通过全局配置文件禁用逻辑删除
可以在`application.yml` 或 `application.properties` 文件中设置全局的逻辑删除开关:
对于YAML格式:
```yaml
mybatis-plus:
global-config:
db-config:
logic-delete-value: "1"
logic-not-delete-value: "0"
logic-delete-field: deleted # 如果字段名为deleted
enable-default-lazy-load: false
sql-injector: default
logic-delete: false # 设置为false表示不开启逻辑删除
```
对于Properties格式:
```properties
mybatis-plus.global-config.db-config.logic-delete=false
```
此方法适用于希望在整个项目范围内统一管理逻辑删除的行为[^2]。
#### 方法二:通过Java代码方式动态控制
如果仅针对特定场景临时关闭逻辑删除,则可在执行操作前修改对应的表映射对象(Mapper)所关联的Entity属性值,或者利用Interceptor拦截器机制,在运行期间调整SQL行为。
例如定义一个自定义插件来绕过逻辑删除过滤条件:
```java
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
public class DisableLogicDeletePlugin implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {}
@Override
public void updateFill(MetaObject metaObject) {
Object deleted = getFieldValByName("deleted", metaObject);
if (null != deleted && Boolean.TRUE.equals(deleted)) {
setFieldValByName("logicDeleted", false, metaObject); // 假设逻辑删除标志位是boolean类型
}
}
}
```
需要注意的是这种方法相对复杂一些,并且可能影响到其他依赖于相同规则的地方,因此建议谨慎使用并充分测试[^3]。
阅读全文
相关推荐


















