jpa 分頁自定義查詢

@Repository
public interface XtTasksSingleRepository extends JpaRepository<XtTasksSingle, Long> {

    Page<XtTasksSingle> findAll(Specification<XtTasksSingle> specification, Pageable pageable);
}
@Override
public BaseResult<Page<XtTasksSingle>> findAllByIdCard(Param4XtTasks param4XtTasks) {

    Pageable pageable = new PageRequest(param4XtTasks.getPageNum(), param4XtTasks.getPageSize(), null);
    Specification<XtTasksSingle> specification = createSpecification(param4XtTasks.getKeyWord(), param4XtTasks.getStatus());
    Page<XtTasksSingle> pageList = xtTasksSingleRepository.findAll(specification, pageable);
    return BaseResult.success(pageList);
}

public Specification<XtTasksSingle> createSpecification(String keyWord, int status){
    Specification<XtTasksSingle> specification1= (Root<XtTasksSingle> root, CriteriaQuery<?> query, CriteriaBuilder cb) ->{

        List<Predicate> listKeyWord=new ArrayList<>();
        if(StringUtils.isNotBlank(keyWord)){
            //查詢的是類的屬性名,不是表的字段名
            listKeyWord.add(cb.equal(root.get("idCard"),keyWord));
            listKeyWord.add(cb.equal(root.get("fullName"),keyWord));
        }
        Predicate[] predicatesKeyWordArr=new Predicate[listKeyWord.size()];
        Predicate predicatesKeyWord;
        if(predicatesKeyWordArr.length > 0){
            predicatesKeyWord = cb.or(listKeyWord.toArray(predicatesKeyWordArr));
        }else{
            predicatesKeyWord = cb.and(listKeyWord.toArray(predicatesKeyWordArr));
        }


        List<Predicate> listStatus = new ArrayList<>();
        if(status > -1){
            //查詢的是類的屬性名,不是表的字段名
            listStatus.add(cb.equal(root.get("status"),status));
        }
        Predicate[] predicatesStatusArr=new Predicate[listStatus.size()];
        Predicate predicatesStatus = cb.and(listStatus.toArray(predicatesStatusArr));

        return query.where(predicatesKeyWord,predicatesStatus).getRestriction();

    };
    return specification1;
}
發佈了62 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章