mybatis-plus LambdaQueryWrapper之判断值是否存在,存在则加入查询,反之亦然
·
需求如下:
如果:如果设置值的时候,值为空则不执行查询语句
代码:
当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则反之
新一代开源开发者平台 GitCode,通过集成代码托管服务、代码仓库以及可信赖的开源组件库,让开发者可以在云端进行代码托管和开发。旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。
更多推荐


所有评论(0)