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

代码:
当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

新一代开源开发者平台 GitCode,通过集成代码托管服务、代码仓库以及可信赖的开源组件库,让开发者可以在云端进行代码托管和开发。旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐