spring-data-jpa Specification 拼接复杂查询

来源:互联网 发布:电脑文件恢复软件 编辑:程序博客网 时间:2024/05/18 16:16
  public Page<ServiceItem> findAll(Map<String, String[]> params, ServiceItemConsumeStatus serviceItemConsumeStatus,ServiceItemStatus serviceItemStatus, Pageable pageable) {        return dao.findAll(spec(serviceItemConsumeStatus, serviceItemStatus, params), pageable);    }    private Specification<ServiceItem> spec(final ServiceItemConsumeStatus serviceItemConsumeStatus,     final ServiceItemStatus serviceItemStatus, Map<String, String[]> params) {        Collection<SearchFilter> filters = SearchFilter.parse(params).values();        final Specification<ServiceItem> fsp = SearchFilter.spec(filters, ServiceItem.class);        Specification<ServiceItem> sp = new Specification<ServiceItem>() {            public Predicate toPredicate(Root<ServiceItem> root, CriteriaQuery<?> query, CriteriaBuilder cb) {                Predicate pred = fsp.toPredicate(root, query, cb);                if (ServiceItemConsumeStatus.可消费.equals(serviceItemConsumeStatus)) {                    pred = cb.and(pred, cb.gt(root.get("countLeft").as(int.class), 0));                } else if (ServiceItemConsumeStatus.消费完毕.equals(serviceItemConsumeStatus)) {                    pred = cb.and(pred, cb.le(root.get("countLeft").as(int.class), 0));                }                if (serviceItemStatus != null) {                    pred = cb.and(pred, cb.equal(root.get("status"), serviceItemStatus));                }                return pred;            }        };        return sp;    }
0 0
原创粉丝点击