返回

从零了解@TableLogic逻辑删除注解,巧用MyBatis Plus赋能数据管理

后端

逻辑删除:使用 @TableLogic 注解保护您的数据

什么是逻辑删除?

想象一下,您经营一家电子商务商店,并且销售数百种产品。突然,您收到报告称其中一款产品存在缺陷,需要将其从商店中删除。但是,如果您直接从数据库中删除该产品,您将失去有关已购买该产品的客户的所有信息。

这里就是逻辑删除发挥作用的地方。逻辑删除是一种技术,它允许您从数据库中隐藏数据,使其不再可见,但实际上数据仍然存在。这样,您既可以满足删除数据的需求,又可以避免数据丢失的风险。

@TableLogic 注解

MyBatis Plus 提供了 @TableLogic 注解,它可以帮助您轻松实现数据的逻辑删除。此注解的原理是通过在数据库表中添加一个名为 "逻辑删除字段" 的字段来实现的。这个字段用来标记数据的删除状态。

@TableLogic 注解的用法

使用 @TableLogic 注解非常简单,只需要在实体类的字段上添加该注解即可。如下所示:

@TableLogic
private Integer deleted;

在上面的代码中,deleted 字段被标记为逻辑删除字段。当 deleted 字段的值为 0 时,表示数据未被删除;当 deleted 字段的值为 1 时,表示数据已被逻辑删除。

@TableLogic 注解的局限性

@TableLogic 注解只对 MyBatis Plus 自动注入的 SQL 生效,不针对手写 SQL 生效。这是因为逻辑删除的原理是在 MyBatis Plus 自动注入的 SQL 中做了特殊处理,实现了逻辑删除功能。

List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("deleted", 0));

上面的代码使用了 MyBatis Plus 的自动注入 SQL,因此 @TableLogic 注解可以正常工作。但是,如果您使用手写 SQL,则 @TableLogic 注解将不会生效。

List<User> users = userMapper.selectList("select * from user where deleted = 0");

上面的代码使用的是手写 SQL,因此 @TableLogic 注解不会生效。

结论

@TableLogic 注解是 MyBatis Plus 中一个非常实用的注解,它可以帮助您轻松实现数据的逻辑删除。但是,需要注意的是,@TableLogic 注解只对 MyBatis Plus 自动注入的 SQL 生效,不针对手写 SQL 生效。

常见问题解答

  1. 逻辑删除和物理删除有什么区别?

    逻辑删除会将数据从数据库中隐藏起来,而物理删除会永久删除数据。

  2. 为什么使用逻辑删除?

    逻辑删除允许您删除数据而不丢失信息,例如客户购买记录。

  3. 如何检查数据是否已被逻辑删除?

    您可以检查逻辑删除字段的值。如果该值不为 0,则表示数据已被逻辑删除。

  4. 是否可以恢复已逻辑删除的数据?

    是的,可以恢复已逻辑删除的数据。您可以使用 MyBatis Plus 的 update 方法来更新逻辑删除字段的值。

  5. @TableLogic 注解有哪些局限性?

    @TableLogic 注解只对 MyBatis Plus 自动注入的 SQL 生效,不针对手写 SQL 生效。