Spring Data Jpa 复杂条件,以及分页查询
springdatajpa如果想进行复杂的条件查询,以及分页的话,是需要重写JpaSpecificationExecutor的,先简单来个查询:
这是重写后的JpaSpecificationExecutor
package com.nzq.repository;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import java.util.List;
public interface JpaSpecificationExecutor<T> {
List<T> findAll(Specification<T> spec, Pageable pageRequest);
}
这是条件构造
Specification<Students> example = new Specification<Students>() {
@Override
public Predicate toPredicate(Root<Students> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
//定义集合来确定Predicate[] 的长度,因为CriteriaBuilder的or方法需要传入的是断言数组
List<Predicate> predicates = new ArrayList<>();
predicates.add(criteriaBuilder.like(root.get("name").as(String.class),"秦%"));
//将集合转化为CriteriaBuilder所需要的Predicate[]
Predicate[] predicateArr = new Predicate[predicates.size()];
predicateArr = predicates.toArray(predicateArr);
return criteriaBuilder.or(predicateArr);
}
};
构造完成时候,就可以查询了
Sort sort = new Sort(Sort.Direction.ASC, "id");
PageRequest pageable = PageRequest.of(0, 2, sort);
System.out.println(studentsRepository.findAll(pageable));