博客信息

关于spring-data-jpa的排序问题

发布时间:『 2019-04-25 06:16』  博客类别:项目异常归总  阅读(974)

废话不多说,直接上代码,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);
    }




关键字:     springboot       jpa  

备案号:湘ICP备19000029号

Copyright © 2018-2019 javaxl晓码阁 版权所有