mybatis-plus中根据一个字段物理删除
时间: 2024-12-13 08:17:15 浏览: 8
在MyBatis-Plus中,如果你想要基于某个字段进行物理删除(也称为软删除或逻辑删除),通常会利用`is_delete`这样的状态字段来标识数据的状态,而不是直接从数据库中删除记录。这种做法保留了原数据,便于后续恢复或审计。
你可以按照以下步骤操作:
1. 首先,在实体类(Entity)中添加一个布尔类型的字段,比如`isDelete`,默认值设置为`false`表示正常状态,`true`表示已删除状态。
```java
public class User {
private Integer id;
private String name;
private boolean isDelete; // 或者是 @TableId(isGenerated = true, property = "id") Boolean deleted = false;
}
```
2. 在MyBatis-Plus的配置中,启用全局通用Mapper,并在其中加入对`isDelete`字段的支持。例如,开启动态SQL功能:
```xml
<global-config>
<config-item name="dynamic-method-selector" value-ref="com.baomidou.mybatisplus.core.global.config.DynamicMethodSelector"/>
</global-config>
<!-- 自定义逻辑删除支持 -->
<plugins>
<plugin interceptor="com.baomidou.mybatisplus.extension.interceptor.LogDeleteInterceptor">
<property name="deleteByIdSql" value="'update table_name set is_delete = #{value} where id = #{id}'"/>
<!-- 其他逻辑删除条件配置 -->
</plugin>
</plugins>
```
3. 当需要删除一条数据时,不再使用`deleteById()`等方法,而是通过`updateById()`并传入`isDelete = true`来更新状态。
```java
User user = new User();
user.setId(1);
user.setIsDelete(true); // 设置为已删除
userMapper.updateById(user); // 更新用户状态为已删除
```
4. 查询时,可以使用`queryByMap()`方法,传递一个查询条件字典,指定`isDelete`作为筛选条件。
```java
Map<String, Object> params = new HashMap<>();
params.put("isDelete", 0); // 查找未删除的数据,0 表示非逻辑删除
List<User> users = userMapper.selectByMap(params);
```
阅读全文