MybatisPlus的逻辑删除功能使用!

前端之家收集整理的这篇文章主要介绍了MybatisPlus的逻辑删除功能使用!前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文代码样例均已上传至Gitee:https://gitee.com/tqbx/springboot-samples-learn

只对自动注入的sql起效:

  • 插入: 不作限制
  • 查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
  • 更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
  • 删除: 转变为 更新

注:

  • 逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除

  • 如果你需要频繁查出来看就不应使用逻辑删除,而是以一个状态去表示。

逻辑删除的配置

  • 步骤一:配置yml,全局配置,3.3.0版本之后,配置logic-delete-field后可以忽略不配置步骤2。
  1. mybatis-plus:
  2. global-config:
  3. db-config:
  4. logic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
  5. logic-delete-value: 1 # 逻辑已删除值(默认为 1)
  6. logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
  1. // 逻辑删除字段
  2. @TableLogic
  3. private Integer deleted;

逻辑删除的测试

  1. @Test
  2. void logicDelete(){
  3. //UPDATE user SET deleted=1 WHERE deleted=0 AND (name = ?)
  4. boolean remove = userService.remove(
  5. new QueryWrapper<User>().eq("name","summer"));
  6. System.out.println(remove);
  7. }
  8. @Test
  9. void select(){
  10. //SELECT id,name,deleted FROM user WHERE deleted=0
  11. List<User> list = userService.list(
  12. new QueryWrapper<User>().select("id","name","deleted"));
  13. System.out.println(list);
  14. }
  15. @Test
  16. public void updateById(){
  17. //UPDATE user SET age=? WHERE id=? AND deleted=0
  18. User user = new User();
  19. user.setId(1320008348799713282L);
  20. user.setAge(20);
  21. boolean b = userService.updateById(user);
  22. System.out.println(b);
  23. }

查询中排除标识字段

使用注解标识需要排除的字段:

  1. @TableField(select = false)
  2. private Integer deleted;

猜你在找的Mybatis相关文章