Mybastis-plus逻辑删除实例演示

x33g5p2x  于2021-09-24 转载在 其他  
字(1.3k)|赞(0)|评价(0)|浏览(369)

一、背景

  • 在实际项目中,有些后台关键表的数据我们不希望直接删除数据,而是利用某个字段标志来标记是否进行了逻辑删除:
    – 比如用户表利用enabled字段标记该行数据是否失效:(enabled=0 代表逻辑已删除,enabled=1 代表数据有效,逻辑未删除)

public class SysUser implements Serializable {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    private String userName;

    @JsonIgnore
    private String password;

    private String nickName;

    /** * 性别 0-未知 1-male,2-female */
    private Integer gender;

    /** * 头像地址 */
    private String avatarUrl;

    private String country;

    private String province;

    private String city;

    @Email
    private String email;

    private String phone;

    private String remarks;

    // enabled=1 数据有效 enabled=0 逻辑已删除 数据失效
    private Boolean enabled;

    private Timestamp lastPasswordResetTime;

    private Timestamp createTime;

    @Builder.Default
    private Timestamp updateTime = Timestamp.valueOf(LocalDateTime.now());

二、实现方法

2.1 增加配置

# application.yml
mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: 0 # 在某些表中使用enabled代表数据是否失效,enabled=0 代表逻辑已删除值
      logic-not-delete-value: 1 # enabled=1 代表逻辑未删除

2.2 添加注解

  • 在数据实体enabled字段上添加@TableLogic注解
public class SysUser implements Serializable {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    private String userName;

    ...
    
    @TableLogic
    private Boolean enabled;

三、测试

  • 编写一个测试类进行测试
@SpringBootTest
@Slf4j
public class TestLogicDelete {

    @Test
    public void test() {
        SysUserMapper sysUserMapper = SpringContextHolder.getBean(SysUserMapper.class);
        // 逻辑删除
        sysUserMapper.deleteById(15L);
    }
}
  • 跟踪测试的SQL语句:没有对行数据进行delete操作,而是使用update语句对enabled字段设为0

  • 查看后台数据表

相关文章