SpringDataJpa的动态条件查询和分页查询
  在Repository继承了JpaSpecificationExecutor<T>后可以直接使用findAll做分页查询和条件查询。
Page<T> findAll(@Nullable Specification<T> spec, Pageable pageable);
 1
# 拼接查询条件
  /**
   * 拼接查询 
   */
  private Specification<T> getSellerBillSpecification(String param1, String param2) {
    //条件
    return (Specification<T>) (root, query, criteriaBuilder) -> {
      //为了动态拼接 使用一个集合存储条件
      List<Predicate> predicateList = new ArrayList<>();
      //范围查询
      if (param1 != null && param2 !=null) {
        predicateList.add(criteriaBuilder.between(root.get("field1"), param1,param2));
      }
      //模糊查询
      if (param1 !=null) {
        predicateList.add(criteriaBuilder.like(root.get("field2"), param1));
      }
      //精确查询
      if (StringUtils.isNotEmpty(1)) {
        predicateList.add(criteriaBuilder.equal(root.get("field3"), param2));
      }
      return criteriaBuilder.and(predicateList.toArray(new Predicate[0]));
    };
  }
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 拼接分页条件
    //页码
    Integer page = 1;
    //每页数量
    Integer size = 20;
    //page从0开始,所以-1
    PageRequest pageRequest = PageRequest.of(page - 1, size, Sort.by(Sort.Order.asc("createTime")));
 1
2
3
4
5
6
2
3
4
5
6
# 响应
详见 org.springframework.data.domain.Page
上次更新: 10/17/2025