需求如下:
如果:如果设置值的时候,值为空则不执行查询语句

代码:
当isDeleted为null的时候

@Test
    void method() {
        Integer isDeleted = null;
        LambdaQueryWrapper<Entity> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(!ObjectUtils.isEmpty(isDeleted),DeviceBrand::getIsDeleted,isDeleted);
        log.info(String.valueOf(queryWrapper));
    }

调试结果:

此时expression里面的normal size == 0

当isDeleted为1的时候

@Test
    void method() {
        Integer isDeleted = 1;
        LambdaQueryWrapper<Entity> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(!ObjectUtils.isEmpty(isDeleted),DeviceBrand::getIsDeleted,isDeleted);
        log.info(String.valueOf(queryWrapper));
    }

此时expression里面的normal size == 3

于是乎我翻了一下mybatis-plus源码
在这里插入图片描述

 protected Children addCondition(boolean condition, R column, SqlKeyword sqlKeyword, Object val) {
        return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(column), sqlKeyword,
            () -> formatParam(null, val)));
    }


    protected final Children maybeDo(boolean condition, DoSomething something) {
        if (condition) {
            something.doIt();
        }
        return typedThis;
    }

如果condition为 true则执行右边的函数,为false则反之

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐