上手比较麻烦,首次写需好好了解(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));
}
//多条件or
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));
//此处在主表实体标注关联ID @OneToMany(mappedBy = "id")
//private List<Object2> object2;
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);
//略标注简写,注意看源码JPA比较全面想要的都有
return Result.success().put("data", pageInfo.getContent()).put("totalPages", pageInfo.getTotalPages()).put("page", page).put("count", pageInfo.getTotalElements());
版权声明:本文为QinQinSmile原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。