spring data jpa复杂查询

基础介绍


1.predicate(位于 javax.persistence.criteria包)

此接口的官方说明https://docs.oracle.com/javaee/6/api/javax/persistence/criteria/Predicate.html

接口的声明如下:


public interface Predicate extends Expression {

Predicate.BooleanOperator getOperator();

    boolean isNegated();

    List> getExpressions();

    Predicate not();

    public static enum BooleanOperator {

AND,

        OR;

        private BooleanOperator() {

}

}

}


方法简介:

方法详情:

用途:用于jpa复杂查询


jpa specification复杂查询

使用specification的核心方法:

List findAll(Specification specification,Pageble pageble);

对于这个方法,可以选择两种方式使用:

1.在repository里面继承JpaSpecificationExecutor类,那么可以直接使用此方法。

2.不用专门继承JpaSpecificationExecutor类,使用基础的JpaRepository。我们需要在repository接口里面声明这个方法,好让jpa自动识别。

然后才可以使用。

第一种方法的使用样例:

eg:

@Repository

public interface RegisterInformationRepository extends JpaSpecificationExecutor, JpaRepository {

}

那么具体怎么使用这个方法呢?

给出一个样例:

public Paging>list(String DEPARTMENT_CODE, int page, int size) {

//        //排序

        Sort.Order order =new Sort.Order(Sort.Direction.DESC, "createdTime");

        Sort sort = Sort.by(order);

        //分页

        Pageable pageable = PageRequest.of(page, size, sort);

        /**

* root:是我们要查询的类型

* query:添加查询条件

* cb:构建Predicate

*/

        Specification specification = (Specification) (root, criteriaQuery, criteriaBuilder) -> {

Predicate predicate = criteriaBuilder.and(criteriaBuilder.equal(root.get("isRemoved"), false));

            if (StringUtils.isNotEmpty(DEPARTMENT_CODE)) {

predicate.getExpressions().add(criteriaBuilder.equal(root.get("DEPARTMENT_CODE"), DEPARTMENT_CODE));

            }

return predicate;

        };

        Page result =departmentRepository.findAll(specification, pageable);

你可能感兴趣的:(spring data jpa复杂查询)