如果 getAreaMin 和 getAreaMax 为 NULL,您可以避免/忽略添加此条件。如果 getAreaMin 是 NULL 并且 getAreaMax 不是 NULL 你可以使用 le() 而不是 between ,对于 getAreaMax 和 gt() 方法也是如此;'if' 代码没问题。
像这样的东西:
if(isNotNull(searchConstraint.getAreaMin()) && isNotNull(searchConstraint.getAreaMax())) {
cb.between(root.get(Property_.area), searchConstraint.getAreaMin(), searchConstraint.getAreaMax())
}else{
if(isNotNull(searchConstraint.getAreaMin()){
cb.gt(root.get(Property_.area), searchConstraint.getAreaMin());
}else{
cb.le(root.get(Property_.area), searchConstraint.getAreaMax());
}
}
或者您可以创建一个 util 方法,例如(但由于性能问题,prev 变体更好):
private Integer getValueOrDefault(Integer value , Integer defaultValue){
return value==null ? defaultValue : value;
}
执行:cb.between(root.get(Property_.area), getValueOrDefault(searchConstraint.getAreaMin(), Integer.MIN_VALUE), getValueOrDefault(searchConstraint.getAreaMax(), Integer.MAX_VALUE))