- 1.Repository额外继承JpaSpecificationExecutor
public interface CommentRepository extends JpaRepository, JpaSpecificationExecutor { }``` # 2.在Service处理分页条件 ```java int page = (object.containsKey("page") && object.getInteger("page") != null && object.getInteger("page") > 0) ? object.getInteger("page") : 1; int size = (object.containsKey("size") && object.getInteger("size") != null && object.getInteger("size") > 0) ? object.getInteger("size") : 20; // Sort.by(Sort.Direction.ASC, "createdTime") 排序条件 Pageable pageable = PageRequest.of(page - 1, size, Sort.by(Sort.Direction.ASC, "createdTime")); // 若含有条件查询,则需要 Specification 进行拼接 //Root:查询哪个表 //CriteriaQuery:查询哪些字段,排序是什么 //CriteriaBuilder:字段之间是什么关系,如何生成一个查询条件,每一个查询条件都是什么方式 //Predicate(expression):单独每一条查询条件的详细描述 Specification specification = (root, criteriaQuery, criteriaBuilder) -> { List predicateList = new ArrayList<>(); // 若要进行模糊查询注意需要单独拼接‘%’,或者前端返回时直接拼接好 // 多条件查询可以获取所有属性后匹配 Map innerMap = object.getInnerMap(); // 获取实体类的所有属性信息 Set> attributes = root.getModel().getAttributes(); List attributeNameList = attributes.stream().map(Attribute::getName).collect(Collectors.toList()); for (Map.Entry 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 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); //排序可以在此加入,也可以在pageable指定 //Order createdTimeOrder = criteriaBuilder.asc(root.get("createdTime")); //return criteriaQuery.orderBy(createdTimeOrder).where(predicateList.toArray(new Predicate[predicateList.size()])).getRestriction(); return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()])); }; Page commentPage = commentRepository.findAll(specification, pageable);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)