mybatis-plus物理删除方法
时间: 2025-03-31 10:08:17 浏览: 43
### MyBatis-Plus 中物理删除方法的实现
在 MyBatis-Plus 的设计中,`remove` 方法默认执行的是逻辑删除操作,前提是已经配置了 `@TableLogic` 注解并启用了逻辑删除功能。然而,如果希望绕过逻辑删除机制而直接执行物理删除,则可以通过以下方式进行:
#### 1. **使用 `deleteById` 或其他原生 SQL 执行物理删除**
MyBatis-Plus 提供了一个名为 `BaseMapper.deleteXXX` 的系列方法来支持物理删除操作。这些方法不会受到逻辑删除的影响,而是直接从数据库中移除记录。
以下是具体的代码示例:
```java
// 物理删除单条记录
int result = userMapper.deleteById(userId);
// 批量物理删除多条记录
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", "inactive");
int batchResult = userMapper.delete(queryWrapper);
```
上述代码中的 `deleteById` 和 `delete` 方法均不涉及逻辑删除字段的操作[^1]。
#### 2. **禁用全局逻辑删除配置**
如果项目中开启了全局逻辑删除(即在 `application.yml` 文件中设置了 `logic-delete-enabled=true`),则可以临时关闭逻辑删除以强制执行物理删除。具体做法如下:
```yaml
mybatis-plus:
global-config:
db-config:
logic-delete-value: 1 # 默认逻辑已删除值
logic-not-delete-value: 0 # 默认未删除值
logic-delete-field: deleted # 自定义逻辑删除字段名
logic-delete-enabled: false # 关闭全局逻辑删除开关
```
当 `logic-delete-enabled=false` 时,所有的删除操作都会退化为物理删除行为[^3]。
#### 3. **自定义 Mapper 接口实现物理删除**
对于更复杂的场景,可以直接编写自定义 SQL 来完成物理删除任务。例如,在 XML 配置文件中定义一个 DELETE 语句:
```xml
<delete id="physicalDelete">
DELETE FROM user WHERE id = #{id}
</delete>
```
或者通过注解形式声明 SQL 查询:
```java
@Delete("DELETE FROM user WHERE id = #{id}")
void physicalDelete(@Param("id") Long id);
```
这种方式完全不受框架内置逻辑删除规则约束,能够精确控制数据的行为[^4]。
---
### 总结
综上所述,MyBatis-Plus 支持多种途径实现物理删除,包括但不限于调用基础 API (`deleteById`)、调整全局配置参数以及手写定制化的 SQL 脚本等方式。开发者应根据实际需求灵活选用最合适的方案。
---
阅读全文
相关推荐
















