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/23/2024