SpecificationBuilder
源码见Github
现有问题
假设有一个domain,里面有如下几个字段:
* Long id
* String name
* Integer age
* String school
* LocalDateTime birthday
如果我们要做一个支持按照标识(精确),年龄(精确),学校(批量),生日(区间),和名字(模糊)进行匹配的动态查询,需要构建一个包含如下字段的condition
- Long id
- String name
- Integer age
- List schools
- LocalDateTime birthdayStart
- LocalDateTime birthdayEnd
之后我们需要编写一段冗长的代码去构建Specification对象
Specification specification = new Specification<User>() {
@Nullable
@Override
public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
L