spring jpa動態條件查詢並分頁
阿新 • • 發佈:2019-01-04
@GetMapping("/api/listPage") @ResponseBody public Map<String, Object> listPage(@RequestParam(value = "pageNumber", defaultValue = "1") Integer pageNumber, @RequestParam(value = "pageSize", defaultValue = "100") Integer pageSize, @RequestParam("searchName") String searchName, @RequestParam("searchUrl") String searchUrl) { //Pageable預設從0開始 pageNumber = pageNumber <= 0 ? 0 : pageNumber - 1; Pageable pageable = new PageRequest(pageNumber, pageSize); // Page<Monitor> monitorList = monitorRepository.findMonitorByNameOrUrl(pageable, searchName, urlPath); Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) { List<Predicate> predicates = new ArrayList<>(); if (StringUtils.isNotBlank(searchName)) { predicates.add(cb.like(root.get("name"), "%" + searchName + "%")); } if (StringUtils.isNotBlank(searchUrl)) { predicates.add(cb.like(root.get("url"), "%" + searchUrl + "%")); } return cb.and(predicates.toArray(new Predicate[predicates.size()])); } }; Page<Monitor> monitorList = monitorRepository.findAll(specification, pageable); Map<String, Object> result = new HashMap<>(); result.put("total", monitorList.getTotalElements()); result.put("rows", monitorList.getContent()); return result; }