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 findOne(Specification var1);

    List findAll(Specification var1);

    Page findAll(Specification var1, Pageable var2);

    List findAll(Specification var1, Sort var2);

    long count(Specification var1);
}
  • 我们会发现直接提供的方法不能同时直接实现where、orderBy、Page三者
  • 但是我们可以通过对 public Predicate toPredicate(){};中的CriteriaQuery criteriaQuery进行利用即可,具体的操作情况如下:
//实现可以多种查询方式结合:模糊搜索,排序,分页
    @Test
    public void testFindCustomerWithSort2() {
        Page page = customerDao.findAll(new Specification() {
            @Override
            public Predicate toPredicate(Root 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 list = page.getContent();
        for (Customer customer : list) {
            System.out.println(customer);
        }
    }

 

你可能感兴趣的:(SpringDataJpa)