Mybastis-plus逻辑删除实例演示

x33g5p2x  于2021-12-30 转载在 其他  
字(1.3k)|赞(0)|评价(0)|浏览(282)

一、背景

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

  1. public class SysUser implements Serializable {
  2. @TableId(value = "id", type = IdType.AUTO)
  3. private Long id;
  4. private String userName;
  5. @JsonIgnore
  6. private String password;
  7. private String nickName;
  8. /** * 性别 0-未知 1-male,2-female */
  9. private Integer gender;
  10. /** * 头像地址 */
  11. private String avatarUrl;
  12. private String country;
  13. private String province;
  14. private String city;
  15. @Email
  16. private String email;
  17. private String phone;
  18. private String remarks;
  19. // enabled=1 数据有效 enabled=0 逻辑已删除 数据失效
  20. private Boolean enabled;
  21. private Timestamp lastPasswordResetTime;
  22. private Timestamp createTime;
  23. @Builder.Default
  24. private Timestamp updateTime = Timestamp.valueOf(LocalDateTime.now());

二、实现方法

2.1 增加配置

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

2.2 添加注解

  • 在数据实体enabled字段上添加@TableLogic注解
  1. public class SysUser implements Serializable {
  2. @TableId(value = "id", type = IdType.AUTO)
  3. private Long id;
  4. private String userName;
  5. ...
  6. @TableLogic
  7. private Boolean enabled;

三、测试

  • 编写一个测试类进行测试
  1. @SpringBootTest
  2. @Slf4j
  3. public class TestLogicDelete {
  4. @Test
  5. public void test() {
  6. SysUserMapper sysUserMapper = SpringContextHolder.getBean(SysUserMapper.class);
  7. // 逻辑删除
  8. sysUserMapper.deleteById(15L);
  9. }
  10. }
  • 跟踪测试的SQL语句:没有对行数据进行delete操作,而是使用update语句对enabled字段设为0

  • 查看后台数据表

相关文章