MyBatis-Plus 提供了逻辑删除的功能,可以方便地处理数据的软删除操作,而不是直接从数据库中物理删除记录。逻辑删除通过在表中添加一个标识字段,通常是表示删除状态的字段,如 deleted,用于标识记录是否被删除。

以下是使用 MyBatis-Plus 进行逻辑删除的简单步骤:

1. 在实体类中添加逻辑删除标识字段:
   import com.baomidou.mybatisplus.annotation.TableLogic;
   import com.baomidou.mybatisplus.annotation.TableName;
   import lombok.Data;

   @Data
   @TableName("user")
   public class User {
       private Long id;
       private String name;
       
       // 逻辑删除标识字段,默认值为 0(未删除),1 表示已删除
       @TableLogic
       private Integer deleted;
   }

   在上述例子中,通过 @TableLogic 注解在实体类中添加了逻辑删除标识字段 deleted。

2. 配置全局逻辑删除属性:

   在 MyBatis-Plus 的配置文件中,需要配置全局的逻辑删除属性,告诉 MyBatis-Plus 使用哪个字段来标识逻辑删除。可以使用 LogicSqlInjector 来实现逻辑删除。
   import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer;
   import com.baomidou.mybatisplus.core.injector.ISqlInjector;
   import com.baomidou.mybatisplus.core.injector.LogicSqlInjector;
   import org.springframework.context.annotation.Bean;
   import org.springframework.context.annotation.Configuration;

   @Configuration
   public class MyBatisPlusConfig {

       @Bean
       public MybatisPlusPropertiesCustomizer plusPropertiesCustomizer() {
           return plusProperties -> plusProperties.getGlobalConfig().setSqlInjector(logicSqlInjector());
       }

       @Bean
       public ISqlInjector logicSqlInjector() {
           return new LogicSqlInjector();
       }
   }

   在上述例子中,通过配置 LogicSqlInjector 设置全局的逻辑删除属性。

3. 使用逻辑删除进行查询:

   在进行查询时,MyBatis-Plus 会自动帮你过滤掉被逻辑删除的记录。
   import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
   import com.baomidou.mybatisplus.extension.service.IService;
   import org.springframework.beans.factory.annotation.Autowired;

   import java.util.List;

   public class UserService {

       @Autowired
       private IService<User> userService;

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

   在上述例子中,通过在查询条件中增加 deleted 字段的条件,可以筛选出未被逻辑删除的记录。

逻辑删除可以很好地保留删除记录的信息,同时不会真正删除数据,适用于需要保留历史数据或具备恢复需求的场景。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7059/MyBatis