您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# MyBatisPlus怎么实现逻辑删除
## 一、什么是逻辑删除
逻辑删除(Logical Delete)是相对于物理删除(Physical Delete)而言的数据库操作方式。在实际业务场景中,我们通常不会真正从数据库中删除数据,而是通过标记字段(如`is_deleted`、`status`等)来标识记录是否被"删除"。
### 逻辑删除 vs 物理删除
| 对比项 | 逻辑删除 | 物理删除 |
|--------------|----------------------------|---------------------|
| 数据存储 | 保留在数据库中 | 从数据库彻底移除 |
| 实现方式 | 更新标记字段 | DELETE语句 |
| 恢复难度 | 容易(修改标记即可) | 困难(需从备份恢复)|
| 查询复杂度 | 需要额外过滤条件 | 无需特殊处理 |
| 适用场景 | 需要数据追溯的业务 | 敏感数据彻底清除 |
## 二、MyBatisPlus实现逻辑删除
MyBatisPlus提供了开箱即用的逻辑删除功能,只需简单配置即可实现。
### 1. 数据库准备
首先需要在表中添加逻辑删除标志字段:
```sql
ALTER TABLE user ADD COLUMN is_deleted TINYINT(1) DEFAULT 0 COMMENT '逻辑删除标志(0-未删除,1-已删除)';
在实体类对应字段上添加@TableLogic
注解:
@Data
@TableName("user")
public class User {
private Long id;
private String name;
@TableLogic
private Integer isDeleted;
}
在application.yml
中配置全局逻辑删除规则:
mybatis-plus:
global-config:
db-config:
logic-delete-field: isDeleted # 全局逻辑删除字段
logic-delete-value: 1 # 逻辑已删除值
logic-not-delete-value: 0 # 逻辑未删除值
执行删除操作时,MyBatisPlus会自动转换为更新操作:
// 实际执行:UPDATE user SET is_deleted=1 WHERE id=1
userMapper.deleteById(1L);
查询时会自动添加未删除条件:
// 实际执行:SELECT * FROM user WHERE is_deleted=0
userMapper.selectList(null);
如果需要手动编写SQL,可以使用@SqlParser
注解或XML方式:
<select id="selectAllIncludeDeleted" resultType="User">
SELECT * FROM user
</select>
结合@InterceptorIgnore
注解可跳过逻辑删除过滤:
@InterceptorIgnore(tenantLine = "true", logicDelete = "true")
List<User> selectAll();
逻辑删除与@Version
乐观锁注解可以同时使用:
@Version
private Integer version;
@TableLogic
private Integer isDeleted;
@SqlParser
过滤// 方案1:使用SQL注入器
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT * FROM user")
List<User> selectAllWithDeleted();
}
// 方案2:使用Wrapper手动覆盖
new QueryWrapper<User>().apply("is_deleted=1 OR is_deleted=0");
不是,MyBatisPlus支持多种类型:
@TableLogic
private Boolean isDeleted; // 使用Boolean类型
@TableLogic
private String delFlag; // 使用字符串类型
通过自定义SQL或继承AbstractMethod
实现:
public int deleteByCondition(@Param("ew") Wrapper<User> wrapper);
deleted
/is_deleted
等通用字段名@TableField(fill = FieldFill.INSERT)
实现操作记录MyBatisPlus的逻辑删除功能通过简单的注解配置,极大简化了开发工作量。在实际项目中,建议结合业务场景合理使用,并注意定期维护删除数据,以保持数据库性能。对于需要频繁删除操作的场景,可以考虑结合Redis等缓存方案优化系统性能。 “`
注:本文实际约1200字,可根据需要增减内容。建议在实际项目中: 1. 添加具体的性能测试数据 2. 补充与具体数据库(如MySQL/Oracle)的兼容性说明 3. 增加与Spring事务的整合示例
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。