jpa 通过Specification实现复杂查询demo

jpa常用复杂查询demo,后期使用方便回忆

public List<DependenceResult> dependence(String order, String name, String source, Long createId, Long entId) {
        List<DependenceResult> list = new ArrayList<>();
        Specification<DataSourceBean> specification = new Specification<DataSourceBean>() {
            @Override
            public Predicate toPredicate(Root<DataSourceBean> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                ArrayList<Predicate> list = new ArrayList<>();
                Path<String> name1 = root.get("name");
                Path<String> type = root.get("type");
                Path<Long> entIds = root.get("entId");
                Path<Long> createby = root.get("createBy");
                //名称
                if (StringUtil.isNotBlank(name)) {
                    list.add(criteriaBuilder.like(name1, "%" + name + "%"));
                }
                //类别
                if (StringUtil.isNotBlank(source)) {
                    if (source.equals("excel")) {
                        list.add(criteriaBuilder.equal(type, source));
                        list.add(criteriaBuilder.equal(type, "online_excel"));
                    } else {
                        list.add(criteriaBuilder.equal(type, source));
                    }
                }
                //创建人id
                if (createId != null) {
                    list.add(criteriaBuilder.equal(createby, createId));
                }
                //企业id
                if (entId != null) {
                    list.add(criteriaBuilder.equal(entIds, entId));
                }
                //根据创建日期排序
                if (StringUtil.isNotBlank(order)) {
                    switch (order) {
                        case "name_asc":
                            criteriaQuery.orderBy(criteriaBuilder.asc(root.get("name").as(String.class)));
                            break;
                        case "name_desc":
                            criteriaQuery.orderBy(criteriaBuilder.desc(root.get("name").as(String.class)));
                               break;
                        case "time_asc":
                            criteriaQuery.orderBy(criteriaBuilder.asc(root.get("createDate").as(Date.class)));
                               break;
                        case "time_desc":
                            criteriaQuery.orderBy(criteriaBuilder.desc(root.get("createDate").as(Date.class)));
                               break;
                        default:
                            criteriaQuery.orderBy(criteriaBuilder.desc(root.get("createDate").as(Date.class)));
                    }
                } else {
                    criteriaQuery.orderBy(criteriaBuilder.desc(root.get("createDate").as(Date.class)));
                }
                Predicate[] array = new Predicate[list.size()];
                return criteriaBuilder.and(list.toArray(array));
            }
        };
        List<DataSourceBean> beans = dsService.findAll(specification);
        for (DataSourceBean bean : beans) {
            Long fid = iFolderService.findFolderIdByDataId(bean.getId());
            DependenceResult result = new DependenceResult();
            result.setId(bean.getId());
            result.setName(bean.getName());
            result.setFolderId(fid == null ? -1L : fid);
            String type = bean.getType();
            if (bean.getType().equals("online_excel")){
                type = "excel";
            }
            result.setType(type);
            list.add(result);
        }
        return list;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值