JPA多条件查询

    技术2025-12-07  18

    1.controller
    /** * 获取查询任务列表 * <p>type为任务类型,1清点,2验收,3验收,4消毒 */ @PostMapping(value = "/listPage/{type}") public EasyUIPagination getPageStorageTaskList(@PathVariable("type") Integer type, SterilizeTaskVo sterilizeTaskVo, QueryTaskListVo params) throws Exception { Page<InventoryCheckTaskListVo> page = storageTaskService.getPageStorageTaskList(type,sterilizeTaskVo,params); return PageToPaginationUtil.toPagination(page); }
    2.impl
    @Override public Page<InventoryCheckTaskListVo> getPageStorageTaskList(Integer type, SterilizeTaskVo sterilizeTaskVo, QueryTaskListVo params) throws Exception { //分页 Pageable pageable = JpaUtil.getPagebleBySort(params.getOrder(), params.getSort(), params.getPage(), params.getRows()); //查询条件 Specification<InventoryCheckTask> spec = (root, query, cb) -> { List<Predicate> list = new ArrayList<>(); //任务类型 if (type != null) { Predicate typePre = cb.equal(root.get("taskType").as(Integer.class), type); list.add(typePre); } //所属客户 if (StringUtils.isNotBlank(sterilizeTaskVo.getCustomer())) { list.add(cb.equal(root.get("customer").get("id").as(String.class), sterilizeTaskVo.getCustomer())); } //所属机构模糊查询 if (StringUtils.isNotBlank(sterilizeTaskVo.getCustomerOrgName())) { list.add(cb.like(root.get("customerOrg").get("name").as(String.class), "%"+sterilizeTaskVo.getCustomerOrgName()+"%")); } //所属状态 if (StringUtils.isNotBlank(sterilizeTaskVo.getStatus())) { list.add(cb.equal(root.get("status").as(Integer.class), sterilizeTaskVo.getStatus())); } //开始日期 if (StringUtils.isNotBlank(sterilizeTaskVo.getSterilizeTimeStart())) { list.add(cb.greaterThanOrEqualTo(root.get("createDate").as(String.class), sterilizeTaskVo.getSterilizeTimeStart())); } //结束日期 if (StringUtils.isNotBlank(sterilizeTaskVo.getSterilizeTimeEnd())) { //日期加1 DateTimeFormatter timeDtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate localDate = LocalDate.parse(sterilizeTaskVo.getSterilizeTimeEnd(), timeDtf); String tmp = localDate.plusDays(1).format(timeDtf); list.add(cb.lessThan(root.get("createDate").as(String.class), tmp)); } return cb.and(list.toArray(new Predicate[list.size()])); }; //查询结果 Page<InventoryCheckTask> page = inventoryCheckTaskRepository.findAll(spec, pageable); if(page==null || page.getTotalElements()<1) { return new PageImpl<>(new ArrayList<>(0), pageable, 0); } List<InventoryCheckTask> lists = page.getContent(); if(lists!=null && lists.size()>0) { List<InventoryCheckTaskListVo> arr = InventoryCheckTaskListVo.taskData2Vo(lists); return new PageImpl<>(arr, pageable, page.getTotalElements()); } return new PageImpl<>(new ArrayList<>(0), pageable, 0); }
    3.JPAUtil
    public class JpaUtil { /** * 获取排序分页查询条件 * @param order 升序降序 * @param sortStr 字段 * @param page 页数 * @param rows 条数 * @return */ public static Pageable getPagebleBySort(String order,String sortStr,Integer page,Integer rows) { Sort sort = null; Pageable pageable = null; if(sortStr!=null && !"".equals(sortStr)) { if(order==null || "".equals(order)){ sort = Sort.by(Sort.Direction.ASC, sortStr); }else{ sort = Sort.by(Sort.Direction.fromString(order), sortStr); } pageable = PageRequest.of(page - 1, rows,sort); }else { pageable = PageRequest.of(page - 1, rows); } return pageable; } /** * 获取排序分页查询条件 * @param pageParams 分页封装参数 * @return */ public static Pageable getPagebleByPageParams(EasyUIPagingationParam pageParams) { return getPagebleBySort( pageParams.getOrder(), pageParams.getSort(), pageParams.getPage(), pageParams.getRows()); } }
    Processed: 0.018, SQL: 9