如果getAreaMin和getAreaMax为NULL,您可以避免/忽略添加此条件。 如果getAreaMin为NULL并且getAreaMax为NOT NULL,则可以使用le()而不是之间的方法,并且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());
}
}
或者你可以创建一个像一个实用程序方法(但上一个变种是更好的DUT性能问题):
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))
来源
2017-06-05 18:39:51
xyz
在我看来,你应该永远不会从这些方法返回null,但默认代替。因此,如果它是一个列表,那么返回'Collections.EMPTY_LIST',如果它是int,则取决于上下文中的“0”或“Integer.MIN_VALUE”等。检出NullObject模式:https://en.wikipedia.org/wiki/Null_Object_pattern。也许考虑使用'Optionals'。 – Shadov