首页 > 解决方案 > Spring data jpa 条件查询重构

问题描述

我在 spring data jpa 项目中有一段代码需要重构。实际上我想减少这种方法的 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())));
        }
    }
}

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

标签: javaspring-data-jpaspecificationscriteria-api

解决方案


推荐阅读