# xxIfNull 方法使用
# 功能介绍
xxIfNull 系列方法提供了一种便捷的方式来处理条件查询中的空值情况。当值为空时,对应的条件不会被添加到查询语句中。
# 支持的方法
目前支持以下方法:
eqIfNull
- 等于(值不为空时)neIfNull
- 不等于(值不为空时)gtIfNull
- 大于(值不为空时)geIfNull
- 大于等于(值不为空时)ltIfNull
- 小于(值不为空时)leIfNull
- 小于等于(值不为空时)likeIfNull
- 模糊查询(值不为空时)notLikeIfNull
- 不包含(值不为空时)likeLeftIfNull
- 左模糊(值不为空时)likeRightIfNull
- 右模糊(值不为空时)notLikeLeftIfNull
- 不以什么开头(值不为空时)notLikeRightIfNull
- 不以什么结尾(值不为空时)betweenIfNull
- 范围查询(两个值都不为空时)notBetweenIfNull
- 不在范围内(两个值都不为空时)
# 使用示例
// 构建查询条件
wrapper.eqIfNull(User::getStatus, status) // status不为空时才会加入条件
.likeIfNull(User::getName, name) // name不为空时才会加入条件
.betweenIfNull(User::getAge, minAge, maxAge) // minAge和maxAge都不为空时才会加入条件
.geIfNull(User::getCreateTime, startTime); // startTime不为空时才会加入条件
// 等价于以下代码
wrapper.eq(ObjectUtils.isNotEmpty(status), User::getStatus, status)
.like(ObjectUtils.isNotEmpty(name), User::getName, name)
.between(ObjectUtils.isNotEmpty(minAge) && ObjectUtils.isNotEmpty(maxAge), User::getAge, minAge, maxAge)
.ge(ObjectUtils.isNotEmpty(startTime), User::getCreateTime, startTime);
# 实际应用场景
- 处理搜索表单
public List<User> searchUsers(UserQuery query) {
return Joins.of(User.class)
.eqIfNull(User::getGender, query.getGender())
.likeIfNull(User::getName, query.getName())
.likeIfNull(User::getEmail, query.getEmail())
.geIfNull(User::getCreateTime, query.getStartTime())
.leIfNull(User::getCreateTime, query.getEndTime())
.list();
}
- 动态查询条件
wrapper.eqIfNull(User::getStatus, status) // 状态条件
.likeIfNull(User::getName, keyword) // 关键字搜索
.inIfNull(User::getType, typeList); // 类型过滤
# 注意事项
- 空值判断
- 使用 ObjectUtils.isNotEmpty() 进行判断
- null、空字符串、空集合都被视为空值
- 数值类型的 0 不被视为空值
- 使用建议
- 适合处理可选查询参数
- 可以减少代码中的显式判空逻辑
- 建议在查询条件比较多的场景使用
- 性能考虑
- 空值条件不会加入SQL,可以提高查询效率
- 减少了无效条件的拼接
← xxxJoin 使用 用法注意 →