废话不多说,直接上代码,JPA通用排序工具类
public class SortDto { //排序方式 private String orderType; //排序字段 private String orderField; public String getOrderField() { return orderField; } public void setOrderField(String orderField) { this.orderField = orderField; } public String getOrderType() { return orderType; } public void setOrderType(String orderType) { this.orderType = orderType; } public SortDto(String orderType, String orderField) { this.orderType = orderType; this.orderField = orderField; } //默认为DESC排序 public SortDto(String orderField) { this.orderField = orderField; this.orderType = "desc"; }
package com.javaxl.p5.utils; import com.javaxl.p5.model.SortDto; import org.springframework.data.domain.Sort; /** * JPA排序工具类 */ public class SortUtil { /** * 默认按ID降序 * @return */ public static Sort basicSort() { return basicSort("desc", "id"); } /** * 任意字段升序降序排列 * @param orderType * @param orderField * @return */ public static Sort basicSort(String orderType, String orderField) { Sort sort = new Sort(Sort.Direction.fromString(orderType), orderField); return sort; } /** * 组合排序 * @param dtos * @return */ public static Sort basicSort(SortDto... dtos) { Sort result = null; for(int i=0; i<dtos.length; i++) { SortDto dto = dtos[i]; if(result == null) { result = new Sort(Sort.Direction.fromString(dto.getOrderType()), dto.getOrderField()); } else { result = result.and(new Sort(Sort.Direction.fromString(dto.getOrderType()), dto.getOrderField())); } } return result; } }
使用场景
按时间倒序
public Page<Blog> listPager(Blog blog, PageBean pageBean) { Pageable pageable = PageRequest.of(pageBean.getPage()-1, pageBean.getRows(), SortUtil.basicSort("desc","releaseDate")); return blogRepository.findAll(new Specification<Blog>() { @Override public Predicate toPredicate(Root<Blog> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) { Predicate predicate = criteriaBuilder.conjunction(); if(blog != null){ if(StringUtils.isNotBlank(blog.getTitle())){ predicate.getExpressions().add(criteriaBuilder.like(root.get("title"),"%"+blog.getTitle()+"%")); } if(StringUtils.isNotBlank(blog.getTypeName())){ predicate.getExpressions().add(criteriaBuilder.equal(root.get("typeName"),blog.getTypeName())); } if(StringUtils.isNotBlank(blog.getSource())){ predicate.getExpressions().add(criteriaBuilder.equal(root.get("source"),blog.getSource())); } if(StringUtils.isNotBlank(blog.getStatus())){ predicate.getExpressions().add(criteriaBuilder.equal(root.get("status"),blog.getStatus())); } } return predicate; } },pageable); }
组合排序
public Page<BlogLinkHis> listPager(BlogLinkHis blogLinkHis, PageBean pageBean) { Pageable pageable = PageRequest.of(pageBean.getPage()-1, pageBean.getRows(), SortUtil.basicSort(new SortDto("desc","clickHit"),new SortDto("desc","releaseTime"))); return blogLinkHisRepository.findAll(new Specification<BlogLinkHis>() { public Predicate toPredicate(Root<BlogLinkHis> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) { Predicate predicate = criteriaBuilder.conjunction(); if(blogLinkHis != null){ if(StringUtils.isNotBlank(blogLinkHis.getTitle())){ predicate.getExpressions().add(criteriaBuilder.like(root.get("title"),"%"+blogLinkHis.getTitle()+"%")); } } return predicate; } },pageable); }
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有