1.Repository额外继承JpaSpecificationExecutor
# 1.Repository额外继承JpaSpecificationExecutor<T>
public interface CommentRepository
extends JpaRepository<Comment, String>, JpaSpecificationExecutor<Comment> {
}```
# 2.在Service处理分页条件
```java
int page = object.getIntValue("page") > 0 ? object.getInteger("page") : 1;
int size = object.getIntValue("size") > 0 ? object.getInteger("size") : 20;
Pageable pageable = PageRequest.of(page - 1, size, Sort.by(Sort.Direction.ASC, "createdTime"));
Specification<Comment> specification =
(root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> predicateList = new ArrayList<>();
Map<String, Object> innerMap = object.getInnerMap();
Set<Attribute<? super Status, ?>> attributes = root.getModel().getAttributes();
List<String> attributeNameList =
attributes.stream().map(Attribute::getName).collect(Collectors.toList());
for (Map.Entry<String, Object> entry : innerMap.entrySet()) {
if (attributeNameList.contains(entry.getKey())) {
Predicate namePredicate =
criteriaBuilder.like(root.get(entry.getKey()), "%" + entry.getValue() + "%");
predicateList.add(namePredicate);
}
}
Predicate namePredicate =
criteriaBuilder.like(
root.get("content"), "%" + object.getString("fuzzyQuery") + "%");
CriteriaBuilder.In<String> uidIn = criteriaBuilder.in(root.get("uid"));
for (String messageId : messageIds) {
uidIn.value(messageId);
}
Predicate createdTime =
criteriaBuilder.between(root.get("createdTime"), dateTime, new Date());
Predicate predicate = criteriaBuilder.and(uidIn);
predicateList.add(namePredicate);
predicateList.add(predicate);
predicateList.add(createdTime);
return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
};
Page<Comment> commentPage = commentRepository.findAll(specification, pageable);