• 【Mybatis-Plus进阶学习(二)】逻辑删除


    想象一个例子,你的淘宝订单被你删除了,但是你所购买的是一个假货,无奈你找到客服,客服帮你恢复了。明明被删除的数据,为什么还有呢?原来,在企业中所有信息都被存在数据库中,而用户所谓的删除都不是真正的删除,在数据库中数据一般有个字段作为删除标识符,例如delete,一般当delete为1时表示删除,为0时表示未删除。

    如果我们手动实现这个功能,就是使用update来更新删除标识符。这样做很繁琐,也不符合我们的思维,代码中大量的Update方法,实际的意义确实删除。所以强大的MP为我们解决了这个问题。

    逻辑删除的简单使用

    第一步:全局配置

    mybatis-plus.global-config.db-config.logic-not-delete-value=0//未删除为0
    mybatis-plus.global-config.db-config.logic-delete-value=1//删除为1
    

    在配置文件中配置logic-not-delete-value和logic-delete-value的值,上面给出的例子同时也是MP的默认配置,如果你想要配置和默认配置一样的值,就不需要配置了。

    第二步:注册组件

        //逻辑删除 3.1.2版本以后的MP不需要
        @Bean
        public ISqlInjector iSqlInjector(){
            return new LogicSqlInjector();
        }
    

    第三步:标记字段

        @TableLogic
        private Integer deleted;
    

    使用 @TableLogic注解来标记删除字段,这个字段对应的数据库的值就是我们之前全局配置的删除值,同时还可以使用 @TableLogic(delval = "1",value = "0")来配置局部变量,但是不推荐这样做,因为局部变量很难被注意到。如果不同的对象有不同的局部变量的话,很容易造成混乱。

    第四步:测试

            userMapper.deleteById(1094592041087729666L);
            List<User> list = userMapper.selectList(null);
    

    可以看出,当我们删除一个数据的时候,MP帮我们更改了他的删除字段的属性。同时强大的MP还会在其他操作,例如查询时,添加上删除字段的判断条件。如上图所示,被删除的字段没有被显示出来。

    查询中排除删除字段

    上个例子中我们查询出的结果中都包含删除字段,这是没有必要的,如需排除,如下使用 @TableField(select = false)注解,即可。

        @TableLogic(delval = "1",value = "0")
        @TableField(select = false)
        private Integer deleted;
    

    自定义语句不会携带删除字段的判断

    当我们使用自定义语句的时候,不会自动添加删除字段的判断,如下:

    userMapper.mySelectList(Wrappers.<User>lambdaQuery().gt(User::getAge, 25));
    
    @Select("select * from user ${ew.customSqlSegment}")
    List<User> mySelectList(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
    

    有两种解决办法,如下:

    1. 在wrapper中加上删除字段的限定条件
    2. 把删除字段的限定条件写在sql中
  • 相关阅读:
    字符串替换
    Problem E: Automatic Editing
    正则表达式学习(1)
    python中的enumerate使用
    使用bottle进行web开发(9):文件上传;json传递
    使用bottle进行web开发(8):get的参数传递,form里的额数据传递等
    dict的setdefault(学习bottle源代码)
    使用bottle进行web开发(6):Response 对象
    使用bottle进行web开发(5):Generating Content
    使用bottle进行web开发(4):HTTPError
  • 原文地址:https://www.cnblogs.com/zllk/p/14239546.html
Copyright © 2020-2023  润新知