 | | lickysee V2EX member #453844, joined on 2019-11-18 15:00:05 +08:00 |
lickysee's recent replies
大致上的思路就是将判断如果是空就不进行查询这种重复的代码提取出来,返回一个 Specification,然后结合官方给出来的例子,进行条件的拼接。
参照官方文档 Example 98. Combined Specifications
提供一个自己的思路,代码仅供参考,希望对你有帮助。
```
public class SpecificationUtil {
public static <T> Specification<T> stringLike(
final String field,
final String param
) {
return skipNullAndBlank(
param,
(builder, root) -> builder.like(root.get(field), "%" + param + "%")
);
}
private static <T> Specification<T> skipNullAndBlank(
String p,
BiFunction<CriteriaBuilder, Root<T>, Predicate> f
) {
return ((Specification<T>) (root, query, builder) -> {
if (Strings.isBlank(p)) {
return query.getGroupRestriction();
} else {
return f.apply(builder, root);
}
});
}
}
```