上手比较麻烦,首次写需好好了解(root, query, builder)
Specification<Object1> cation = (root, query, builder) -> {
List<Predicate> predicates= new ArrayList<>();
if (StringUtils.hasText(params)) {
predicates.add(builder.equal(root.get("fieId"), params));
}
if (StringUtils.hasText(params)) {
Predicate params1= builder.like(root.get("fieId1"), "%" + params+ "%");
Predicate params2= builder.like(root.get("fieId2"), "%" + params+ "%");
Predicate params3= builder.like(root.get("fieId3"), "%" + params+ "%");
predicates.add(builder.or(params1, params2, params3));
}
if (StatusCodeConstant.INSURED.equals(status)) {
predicates.add(builder.equal(root.get("status"), status));
Join<Object1, Object2> join = root.join("object2", JoinType.LEFT);
predicates.add(builder.between(builder.currentDate(), join.get("startDate"), join.get("endDate")));
}
predicates.add(builder.not(builder.between(builder.currentDate(), join.get("startDate"), join.get("endDate"))));
if (predicates.size() > 0) {
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
}
return builder.conjunction();
};
Pageable pageable = PageRequest.of(page - 1, size, Sort.by("fieId"));
Page<Object1> pageInfo = object1Repository.findAll(cation, pageable);
return Result.success().put("data", pageInfo.getContent()).put("totalPages", pageInfo.getTotalPages()).put("page", page).put("count", pageInfo.getTotalElements());