JPA 分页 条件 查询

 

 

复制代码
public Page<ReportTask> getListByPage(ReportTaskQueryDto reportTaskQueryDto) {
        final Integer offset = reportTaskQueryDto.getOffset();
        final Integer limit = reportTaskQueryDto.getLimit();
        Sort sort = Sort.sort(ReportTask.class).by(ReportTask::getCreateTime).descending();
        PageRequest pageRequest = PageRequest.of(offset, limit, sort);
        Specification<ReportTask> specification = (root, query, criteriaBuilder) -> {
            Predicate predicate = criteriaBuilder.conjunction();
            List<Expression<Boolean>> expressions = predicate.getExpressions();
            if (!Objects.isNull(reportTaskQueryDto.getTaskName())) {
                expressions.add(criteriaBuilder.like(root.get("taskName"), "%" + reportTaskQueryDto.getTaskName() + "%"));
            }
            if (!Objects.isNull(reportTaskQueryDto.getStatus())) {
                expressions.add(criteriaBuilder.equal(root.get("status"), reportTaskQueryDto.getStatus()));
            }
            return predicate;
        };

        return reportTaskRepository.findAll(specification, pageRequest);
    }
复制代码

 

复制代码
public Page<Topo> topoList(QueryDto queryDto) {
        // 当前登录用户所拥有的角色,角色所拥有的资产管理的单位id集合 如果为null,则表示全部
        Set<String> orgIds = dataPermissionHelper.orgDataPermission();
        PageRequest pageRequest = PageRequest.of(queryDto.getOffset(), queryDto.getLimit(),
                Sort.sort(Topo.class).by(Topo::getUpdateTime).descending());
        Specification<Topo> specification = (root, query, criteriaBuilder) -> {
            Predicate predicate = criteriaBuilder.conjunction();
            List<Expression<Boolean>> expressions = predicate.getExpressions();
            if (StringUtils.isNotBlank(queryDto.getSearch())) {
                expressions.add(criteriaBuilder.like(root.get("name"), "%" + queryDto.getSearch() + "%"));
            }
            if (queryDto.getStartTime() != null && queryDto.getEndTime() != null) {
                expressions.add(criteriaBuilder.greaterThanOrEqualTo(root.get("createTime"), queryDto.getStartTime()));
                expressions.add(criteriaBuilder.lessThanOrEqualTo(root.get("createTime"), queryDto.getEndTime()));
            }

            if (StringUtils.isNotBlank(queryDto.getOrganizationId())) {
                expressions.add(criteriaBuilder.equal(root.get("organizationId"), queryDto.getOrganizationId()));
            }

            if (queryDto.getTypes() != null) {
                expressions.add(criteriaBuilder.equal(root.get("types"), queryDto.getTypes()));
            }

            if (orgIds != null && !orgIds.isEmpty()) {
                CriteriaBuilder.In<Object> preIn = criteriaBuilder.in(root.get("organizationId"));
                for (String orgId : orgIds) {
                    preIn.value(orgId);
                }
                expressions.add(preIn);
            }
            expressions.add(criteriaBuilder.equal(root.get("isDelete"), 0));

            if (queryDto.getId() != null && !queryDto.getId().equals("0")) {
                CriteriaBuilder.In<Object> preIn = criteriaBuilder.in(root.get("id"));
                List<Long> idList = new ArrayList<>();
                if (!queryDto.getNodeType().equals("node")) {
                    idList.add(Long.valueOf(queryDto.getId()));
                } else {
                    // 获取级联拓扑ID
                    try {
                        idList.addAll(getIdList(queryDto.getId()));
                    } catch (CascadeException e) {
                        e.printStackTrace();
                    }
                }
                for (Long id : idList) {
                    preIn.value(id);
                }
                expressions.add(preIn);
            }
            return predicate;
        };
        return topoRepository.findAll(specification, pageRequest);
    }
复制代码

 

posted @   你的小可爱吖  阅读(133)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示