Specification同时实现模糊查询、排序、分页

Specification同时实现模糊查询、排序、分页

  • 以下为Specification接口的方法
package org.springframework.data.jpa.repository;

import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;

public interface JpaSpecificationExecutor<T> {
    T findOne(Specification<T> var1);

    List<T> findAll(Specification<T> var1);

    Page<T> findAll(Specification<T> var1, Pageable var2);

    List<T> findAll(Specification<T> var1, Sort var2);

    long count(Specification<T> var1);
}
  • 我们会发现直接提供的方法不能同时直接实现where、orderBy、Page三者
  • 但是我们可以通过对 public Predicate toPredicate(){};中的CriteriaQuery<?> criteriaQuery进行利用即可,具体的操作情况如下:
//实现可以多种查询方式结合:模糊搜索,排序,分页
    @Test
    public void testFindCustomerWithSort2() {
        Page<Customer> page = customerDao.findAll(new Specification<Customer>() {
            @Override
            public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                Predicate predicate1 = criteriaBuilder.like(root.get("custName"), "%未来%");
                Predicate predicate = criteriaQuery.where(predicate1).orderBy(criteriaBuilder.asc(root.get("custId"))).getRestriction();
                return predicate;
            }
        }, new PageRequest(0, 10));
        System.out.println(page.getTotalElements());
        System.out.println(page.getTotalPages());
        List<Customer> list = page.getContent();
        for (Customer customer : list) {
            System.out.println(customer);
        }
    }
发布了74 篇原创文章 · 获赞 24 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/STUDENTstudent123/article/details/100163872