• 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。
    mybatis-plus:
      global-config:
        db-config:
          logic-delete-field: deleted  # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
          logic-delete-value: 1 # 逻辑已删除值(默认为 1)
          logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
    
    • 步骤二:加上逻辑删除的注解,局部配置。
        // 逻辑删除字段
        @TableLogic
        private Integer deleted;
    

    逻辑删除的测试

    @Test
    void logicDelete(){
        //UPDATE user SET deleted=1 WHERE deleted=0 AND (name = ?)
        boolean remove = userService.remove(
            new QueryWrapper<User>().eq("name", "summer"));
        System.out.println(remove);
    
    }
    @Test
    void select(){
        //SELECT id,name,deleted FROM user WHERE deleted=0
        List<User> list = userService.list(
            new QueryWrapper<User>().select("id","name","deleted"));
        System.out.println(list);
    }
    @Test
    public void updateById(){
        //UPDATE user SET age=? WHERE id=? AND deleted=0
        User user = new User();
        user.setId(1320008348799713282L);
        user.setAge(20);
        boolean b = userService.updateById(user);
        System.out.println(b);
    }
    

    查询中排除标识字段

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

        @TableField(select = false)
        private Integer deleted;
    
  • 相关阅读:
    Swift学习 --- 2.1基础部分
    【oracle案例】ORA-01722
    一种适合于大数据的并行坐标下降法
    【机器学习算法-python实现】svm支持向量机(3)—核函数
    让Editplus支持sql语法高亮显示
    CF986F Oppa Funcan Style Remastered
    HashMap和Hashtable的区别
    ArrayList和Vector的区别
    基本概念
    java编程规范
  • 原文地址:https://www.cnblogs.com/summerday152/p/13874936.html
Copyright © 2020-2023  润新知