逻辑删除
定义
在实体字段上标注 @ModelLogic 注解即可启用逻辑删除(软删除):
@ModelName("shop_user")
public class User {
@ModelLogic(value = "0", deleteVal = "2")
private String delFlag;
}
注解参数
| 参数 | 说明 | 示例 |
|---|---|---|
value | 未删除时的值 | "0" / 空(表示 IS NULL) |
deleteVal | 删除后设置的值 | "2" |
deleteValFill | 删除时的填充策略 | ModelFieldFill.DATETIME |
deleteValFillMethod | 自定义填充方法 | - |
字段类型
- 字符串类型:
value="0",deleteVal="2" - 数值类型:
value=0,deleteVal=1 - 日期类型:
deleteValFill=ModelFieldFill.DATETIME自动填充删除时间 - IS NULL 形式:不设置 value 值,表示
delete_flag IS NULL为未删除
查询
默认行为
查询时自动追加条件过滤已删除记录:
WHERE del_flag = '0'
包含已删除
ModelWrapper.lambda(User.class)
.includeSoftDelete()
.select();
关联查询中包含已删除
new ModelWrapper<>(User.class)
.leftJoin(UserThird.class, UserThird::getUserId, User::getId)
.includeSoftDelete()
.eq(User::getId, 1)
.field(User::getId, User::getNickName)
.pagination();
删除操作
逻辑删除(默认)
// 实体标注 @ModelLogic 时,delete() 自动转为 UPDATE
ModelWrapper.lambda(User.class)
.eq(User::getId, 1)
.delete();
-- 实际执行: UPDATE shop_user SET del_flag = '2' WHERE id = 1 AND del_flag = '0'
注意事项
- 逻辑删除的记录在下次查询时默认不可见
- 如需恢复已删除记录,可直接执行 UPDATE
