坑:MyBatis-Plus 逻辑删除配置与使用指南

在使用 MyBatis-Plus 时,逻辑删除是一项常见的需求,它通过标志位来标记数据是否被删除,而不是直接删除数据。MyBatis-Plus 提供了简单的配置来实现这一功能,但在实际使用过程中,可能会遇到一些坑。本文将介绍如何正确配置和使用 MyBatis-Plus 的逻辑删除功能。

步骤 1: 配置全局逻辑删除属性

首先,在 application.yml 中配置 MyBatis-Plus 的全局逻辑删除属性。这样,我们可以在全局范围内配置哪个字段是逻辑删除字段,以及如何判断该字段的值表示数据是否已删除。

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted       # 指定全局逻辑删除字段名
      logic-delete-value: 1             # 逻辑已删除值
      logic-not-delete-value: 0         # 逻辑未删除值

在这里,我们配置了:

  • logic-delete-field:指定逻辑删除的字段名,这里使用的是 deleted
  • logic-delete-value:指定逻辑删除的值,通常使用 1 来表示已删除。
  • logic-not-delete-value:指定逻辑未删除的值,通常使用 0 来表示未删除。

步骤 2: 在实体类中使用 @TableLogic 注解

在实体类中,使用 MyBatis-Plus 提供的 @TableLogic 注解来标记逻辑删除的字段。这个注解告诉 MyBatis-Plus 该字段是用来表示数据是否被逻辑删除的。

import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("user")
public class User {

    @TableId
    private Long id;

    private String username;

    @TableLogic
    private Integer deleted; // 逻辑删除字段
}

在上面的代码中,deleted 字段被注解为 @TableLogic,表示这是一个用于逻辑删除标志的字段。当数据被删除时,这个字段的值会被设置为 1,而未删除的记录会保持 0

步骤 3: 执行逻辑删除

在执行删除操作时,MyBatis-Plus 会自动将 deleted 字段的值更新为 1,而不是物理删除该条记录。例如,执行逻辑删除操作时:

public void deleteUser(Long userId) {
    User user = new User();
    user.setId(userId);
    user.setDeleted(1);  // 逻辑删除
    userService.updateById(user);
}

执行上述代码时,MyBatis-Plus 会自动更新 deleted 字段的值为 1,而不是删除该记录。

步骤 4: 查询数据时注意逻辑删除

当查询数据时,MyBatis-Plus 会自动排除已经被逻辑删除的数据。只需要简单地调用 list() 方法,MyBatis-Plus 会根据 deleted 字段的值自动过滤已删除的数据。

public List<User> getUsers() {
    return userService.list();
}

在上面的查询操作中,MyBatis-Plus 会自动过滤掉 deleted 字段为 1 的记录(即已删除的记录)。

步骤 5: 手动覆盖逻辑删除

如果你需要查询已删除的数据或覆盖默认的逻辑删除行为,可以使用 QueryWrapper 手动指定查询条件:

public List<User> getUsersIncludingDeleted() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("deleted", 0);  // 查询未删除的记录
    return userService.list(queryWrapper);
}

通过 QueryWrapper,你可以灵活地控制是否需要包含已删除的数据。

小结

  1. 全局配置:在 application.yml 中配置全局逻辑删除字段及其对应的值。
  2. 实体类注解:在实体类中使用 @TableLogic 注解标记逻辑删除字段。
  3. 逻辑删除操作:使用 MyBatis-Plus 自动处理逻辑删除,更新 deleted 字段为 1
  4. 查询过滤:MyBatis-Plus 会自动排除已逻辑删除的数据,保证查询结果的准确性。
  5. 手动查询:通过 QueryWrapper 可以灵活控制是否查询已删除的数据。

通过上述配置和使用,MyBatis-Plus 能够帮助我们实现简洁的逻辑删除功能,避免直接从据库中物理删除数据,确保数据的完整性。如果在使用过程中遇到其他问题,欢迎留言交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值