Java Spring数据jpa条件查询重构

Java Spring数据jpa条件查询重构,java,spring-data-jpa,specifications,criteria-api,Java,Spring Data Jpa,Specifications,Criteria Api,我在SpringDataJPA项目中有一段代码需要重构,实际上我想减少这个方法的if-else阶梯 private static void buildEntitlementFilterQuery(Root<Entitlement> entitlement, CriteriaBuilder cb, List<Predicate> predicates, Entry<String, String> entry) { if (StringU

我在SpringDataJPA项目中有一段代码需要重构,实际上我想减少这个方法的if-else阶梯

private static void buildEntitlementFilterQuery(Root<Entitlement> entitlement, CriteriaBuilder cb,
        List<Predicate> predicates, Entry<String, String> entry) {

    if (StringUtils.isNotBlank(entry.getValue())) {
        if (entry.getKey().equalsIgnoreCase(Constants.START_DATE)) {
            predicates.add(cb.and(cb.greaterThanOrEqualTo(entitlement.get(entry.getKey()),
                    DateUtil.convertString(entry.getValue()))));
        } else if (entry.getKey().equalsIgnoreCase(Constants.END_DATE)) {
            predicates.add(cb.and(cb.lessThanOrEqualTo(entitlement.get(entry.getKey()),
                    DateUtil.convertString(entry.getValue()))));
        } else if (entry.getKey().equalsIgnoreCase(Constants.QNT_GRANTED)) {
            predicates.add(cb.and(cb.greaterThan(entitlement.get(entry.getKey()), entry.getValue())));
        } else if (entry.getKey().equalsIgnoreCase(Constants.VALUE_GRANTED)) {
            predicates.add(cb.and(cb.greaterThan(entitlement.get(entry.getKey()), entry.getValue())));
        } else if (StringUtils.contains(entry.getValue(), Constants.COMMA)) {
            predicates.add(
                    cb.and(entitlement.get(entry.getKey()).in(Arrays.asList(StringUtils.split(entry.getValue())))));
        } else {
            predicates.add(cb.and(cb.equal(entitlement.get(entry.getKey()), entry.getValue())));
        }
    }
}
私有静态void buildAuthenticationFilterQuery(根权限、CriteriaBuilder cb、,
列表谓词,条目){
if(StringUtils.isNotBlank(entry.getValue())){
if(entry.getKey().equalsIgnoreCase(Constants.START_DATE)){
add(cb.and(cb.greaterThanOrEqualTo(entity.get(entry.getKey())),
DateUtil.convertString(entry.getValue());
}else if(entry.getKey().equalsIgnoreCase(Constants.END_DATE)){
add(cb.and(cb.lessThanOrEqualTo(entity.get(entry.getKey())),
DateUtil.convertString(entry.getValue());
}else if(entry.getKey().equalsIgnoreCase(Constants.QNT_){
add(cb.and(cb.greaterThan(entity.get(entry.getKey()),entry.getValue());
}else if(entry.getKey().equalsIgnoreCase(Constants.VALUE_-grated)){
add(cb.and(cb.greaterThan(entity.get(entry.getKey()),entry.getValue());
}else if(StringUtils.contains(entry.getValue(),Constants.逗号)){
谓词.add(
(Arrays.asList(StringUtils.split(entry.getValue()))))中的cb.and(entity.get(entry.getKey()));
}否则{
add(cb.and(cb.equal(entity.get(entry.getKey()),entry.getValue()));
}
}
}

或者我必须为每个操作制定每个方法?有什么建议吗?

在您提供的代码示例中添加一些换行符可能会很有用,以便StackOverflow上的其他人更容易阅读并提供答案。您还可以将StringUtils.isNotBlank()分隔到单独的行中,而不是将其包含在每个条件中。此外,如果传入时条件与情况匹配,则这可能是切换的良好候选条件