JPA简单分页条件查询

落日映苍穹つ 2024-04-23 21:16 172阅读 0赞

分页条件查询

Controller层

  1. @PostMapping("getUserPage")
  2. public Page getUserPage(@RequestBody Map<String,Object> map){
  3. return userService.getUserPage(map);
  4. }

Service层

  1. public Page getUserPage(Map<String, Object> map) {
  2. String orderBy = "id";
  3. Boolean isAsc = true;
  4. Boolean isDel=null;
  5. int pages = Integer.valueOf(map.get("pages").toString());
  6. map.remove("pages");
  7. int size = Integer.valueOf(map.get("size").toString());
  8. map.remove("size");
  9. if (map.get("orderBy") != null) {
  10. orderBy = (String) map.get("orderBy");
  11. map.remove("orderBy");
  12. }
  13. if (map.get("isAsc") != null) {
  14. isAsc = (Boolean) map.get("isAsc");
  15. map.remove("isAsc");
  16. }
  17. if (map.get("isDel") != null) {
  18. isDel = (Boolean) map.get("isDel");
  19. map.remove("isDel");
  20. }
  21. Boolean finalIsDel = isDel;
  22. Specification<User> spec = new Specification<User>() {
  23. @Override
  24. public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
  25. Predicate res = null;
  26. if (finalIsDel!= null) {
  27. res = cb.equal(root.get("isDel"), finalIsDel);
  28. }
  29. for (String entryKey : map.keySet()) {
  30. Path<Object> fuck = root.get(entryKey);
  31. Predicate temp = cb.like(fuck.as(String.class), "%" + (String) map.get(entryKey) + "%");
  32. if (res == null) {
  33. res = temp;
  34. continue;
  35. }
  36. res = cb.and(res, temp);
  37. }
  38. return res;
  39. }
  40. };
  41. Sort sort = Sort.by(Sort.Direction.ASC, orderBy);
  42. if (!isAsc) {
  43. sort = Sort.by(Sort.Direction.DESC, orderBy);
  44. }
  45. PageRequest page = PageRequest.of(pages - 1, size, sort);
  46. Page<User> one = userRepository.findAll(spec, page);
  47. System.out.println(one.getTotalElements());
  48. return one;
  49. }

建议接参写个dto,别直接map
开发一时爽,维护火葬场

发表评论

表情:
评论列表 (有 0 条评论,172人围观)

还没有评论,来说两句吧...

相关阅读

    相关 jpa关联查询+

    最近在使用jpa单表操作的时候是非常的方便,但是设计到一些多表查询的时候就比较蛋疼了。 我的需求是项目中设计到一个分页以及关联查询以及多条件查询。 @Query(v