何为逻辑删除
-
删除数据,可以通过物理删除,也可以通过逻辑删除。
-
物理删除指的是直接将数据从数据库中删除,不保留。
-
逻辑删除指的是修改数据的某个字段,使其表示为已删除状态,而非删除数据,保留该数据在数据库中,但是查询时不显示该数据(查询时过滤掉该数据)。
方案
给数据表增加一个字段:is_del,用于表示该数据是否被逻辑删除,初始值为 0。0 表示未删除, 1 表示删除。
方法一
实体类字段上加上注解
- value = “未删除的值,默认值为0”;若设置为2,则查询时 where 后面自动拼接 is_del = 2
- delval = “删除后的值,默认值为1”
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty("是否删除标识 0:未删除 1:删除")
@TableLogic(value = "0",delval = "1")
private int isDel;
执行删除,原 deleteById 会物理删除,现在实现逻辑删除
testMapper.deleteById(id);
执行删除后,id 对应行数据的 is_del 字段会变成 1
由于 isDel 添加了 @TableLogic 注解,MyBatis Plus 做所有查询操作时,自动会在 where 条件后面拼上 is_del = 0,所以 is_del 置一后,实现了逻辑删除
思考:一般情况下,我们表设计会有两个时间字段,一个时创建时间,另一个是最后更新时间;通过最后更新时间我们可以知道该数据被删除的时间,那么方法一 deleteById 后,同时更新最后修改时间吗?
答:不可以,如需改变最后修改时间,请选择方法二
方法二
思路就是通过 update 方法来把 is_del 从 0 更新为 1,通过 MyBatis Plus 提供的自动填充功能,可以自动更新最后修改时间和最后修改人
配置自动填充
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
public class MyObjectHandler implements MetaObjectHandler {
@Override
public void updateFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "mender", () -> this.getUserName(), String.class);
this.strictInsertFill(metaObject, "menderId", () -> this.getUserId(), Long.class);
this.strictInsertFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class);
}
private String getUserName() {
return "username";
}
private Long getUserId() {
return -1L;
}
}
service 层执行,找出 id 对应的一行,然后把 is_del 字段更新成 1文章来源:https://www.toymoban.com/news/detail-431997.html
public void deleteById(Long id) {
LambdaUpdateWrapper<TestPO> updateWrapper = new UpdateWrapper<TestPO>().lambda();
updateWrapper.set(TestPO::getIsDel, 1).eq(TestPO::getId, id);
baseMapper.update(new TestPO(), updateWrapper);
}
此时最后修改人和最后修改时间等于删除人和删除时间,完美文章来源地址https://www.toymoban.com/news/detail-431997.html
到了这里,关于MyBatis Plus 逻辑删除的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!