條件分頁查詢
@Transactional(readOnly = true)
@SuppressWarnings("unchecked")
public Page<GroupDetails> findAllByPage(String uid, String title, LocalDateTime startTime, LocalDateTime endTime, Pageable pageable) {
return repository.findAll((root, query, criteriaBuilder) -> {
List<Predicate> predicateList = new ArrayList<>();
predicateList.add(criteriaBuilder.equal(root.get("userPid"), uid));
if (startTime != null || endTime != null) {
predicateList.add(criteriaBuilder.between(root.get("createTime"), startTime, endTime));
}
if (title != null && !title.isEmpty()) {
predicateList.add(criteriaBuilder.like(root.get("groupName"), "%" + title + "%"));
}
if (predicateList.size() > 0) {
Predicate[] predicates = new Predicate[predicateList.size()];
for (int i = 0; i < predicates.length; i++) {
predicates[i] = predicateList.get(i);
}
query.where(predicates);
}
query.orderBy(criteriaBuilder.desc(root.get("createTime")));
return query.getRestriction();
}, pageable);
}