基礎(chǔ)介紹
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() {
}
}
}
方法簡(jiǎn)介:
方法詳情:
用途:用于jpa復(fù)雜查詢
jpa specification復(fù)雜查詢
使用specification的核心方法:
List<Object> findAll(Specification specification,Pageble pageble);
對(duì)于這個(gè)方法歧蒋,可以選擇兩種方式使用:
1.在repository里面繼承JpaSpecificationExecutor類盆昙,那么可以直接使用此方法舀奶。
2.不用專門繼承JpaSpecificationExecutor類,使用基礎(chǔ)的JpaRepository。我們需要在repository接口里面聲明這個(gè)方法粪般,好讓jpa自動(dòng)識(shí)別。
然后才可以使用。
第一種方法的使用樣例:
eg:
@Repository
public interface RegisterInformationRepository extends JpaSpecificationExecutor<RegisterInformation>, JpaRepository<RegisterInformation, String> {
}
那么具體怎么使用這個(gè)方法呢构订?
給出一個(gè)樣例:
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);
? ? ? ? //分頁(yè)
? ? ? ? Pageable pageable = PageRequest.of(page, size, sort);
? ? ? ? /**
* root:是我們要查詢的類型
* query:添加查詢條件
* cb:構(gòu)建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);