废话不多说,直接上代码,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晓码阁 版权所有