springJpa Specification 时间查询范围

该代码段展示了如何在Java应用中使用SpringDataJPA进行分页查询和模糊匹配。方法接收FileDto对象,从中获取当前页码、页码大小和过滤条件,如文件名、文件入库状态以及文件分析时间范围。然后,它创建一个Pageable对象用于排序和分页,并构建一个Specification来定义查询条件。最后,通过DAO调用findAll方法获取数据并返回PageModel结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public PageModel<FileEntity> getFiles(FileDto fileDto) {
        // 获取当前页码
        Integer pageNo = fileDto.getCurPage();
        // 获取页码大小
        Integer pageSize = fileDto.getPageSize();
        // 保证当前页码合法性
        pageNo = (null == pageNo || pageNo <= 0) ? 0 : (pageNo - 1);
        // 默认一页十条数据
        pageSize = (null == pageSize) ? 10 : pageSize;
        // 分页查询,字段排序
        Pageable pageable = PageRequest.of(pageNo, pageSize, Sort.by("id").descending());
        // 字段查询,模糊匹配
        Specification<FileEntity> specification = (root, query, criteriaBuilder) -> {
            List<Predicate> predicates = new ArrayList<>();
            // 文件名称
            // root.get("fileName") 是实体字段属性,不是数据库字段
            String fileName = fileDto.getFileName();
            if(StringUtils.isNotBlank(fileName)){
                predicates.add(criteriaBuilder.like(root.get("fileName"), "%" + fileName + "%"));
            }

            // 文件入库状态
            Integer fileSaveStatus = fileDto.getFileSaveStatus();
            if(null != fileSaveStatus){
                predicates.add(criteriaBuilder.equal(root.get("fileSaveStatus"), fileSaveStatus));
            }

            // 解析时间 大于等于
            Date startFileAnalysisTime = fileDto.getStartFileAnalysisTime();
            if(null != startFileAnalysisTime){
                predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get("fileAnalysisTime").as(Date.class), startFileAnalysisTime));
            }
            // 解析时间 小于等于
            Date endFileAnalysisTime = fileDto.getEndFileAnalysisTime();
            if(null != endFileAnalysisTime){
                predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get("fileAnalysisTime").as(Date.class), endFileAnalysisTime));
            }

            //返回查询条件
            return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
        };
        Page<FileEntity> fileEntitys = fileServiceDao.findAll(specification, pageable);
        // Page<AppReportMappingEntity> pageAll = appReportMappingDao.findAll(specification, pageable);
        return new PageModel(fileEntitys.getTotalElements(), fileEntitys.getTotalPages(), pageNo, pageSize, fileEntitys.getContent());
    }
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageModel<T> {
    private long totalRows;
    private long totalPages;
    private int curPage;
    private int pageSize;
    private List<T> result;

    public static PageModel transModel(Page page, List content) {
        PageModel pageModel = new PageModel();
        pageModel.setTotalRows(page.getTotalElements());
        pageModel.setTotalPages(page.getTotalPages());
        pageModel.setCurPage(page.getPageable().getPageNumber() + 1);
        pageModel.setPageSize(page.getPageable().getPageSize());
        pageModel.setResult(content);
        return pageModel;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值