zoukankan      html  css  js  c++  java
  • 【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中
  • 相关阅读:
    97. Interleaving String
    96. Unique Binary Search Trees
    95. Unique Binary Search Trees II
    94. Binary Tree Inorder Traversal
    odoo many2many字段 指定打开的form视图
    docker sentry 配置文件位置
    postgres 计算时差
    postgres 字符操作补位,字符切割
    postgres判断字符串是否为时间,数字
    odoo fields_view_get
  • 原文地址:https://www.cnblogs.com/zllk/p/14239546.html
Copyright © 2011-2022 走看看