SortUtil工具类处理排序(设置分页Page和QueryWrapper排序字段及排序规则)

package cc.mrbird.febs.common.utils;

import cc.mrbird.febs.common.entity.FebsConstant;
import cc.mrbird.febs.common.entity.QueryRequest;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;

/**
 * 处理排序工具类
 *
 * @author MrBird
 */
public class SortUtil {

    /**
     * 处理排序(分页情况下) for mybatis-plus
     *
     * @param request           QueryRequest
     * @param page              Page
     * @param defaultSort       默认排序的字段
     * @param defaultOrder      默认排序规则
     * @param camelToUnderscore 是否开启驼峰转下划线
     */
    public static void handlePageSort(QueryRequest request, Page<?> page, String defaultSort, String defaultOrder, boolean camelToUnderscore) {
        page.setCurrent(request.getPageNum());
        page.setSize(request.getPageSize());
        //需要排序的字段
        String sortField = request.getField();
        //是否开启驼峰转下划线
        if (camelToUnderscore) {
            sortField = FebsUtil.camelToUnderscore(sortField);
            defaultSort = FebsUtil.camelToUnderscore(defaultSort);
        }
        if (StringUtils.isNotBlank(request.getField())//排序字段不为空
                && StringUtils.isNotBlank(request.getOrder())//排序规则不为空,asc升序,desc降序
                && !StringUtils.equalsIgnoreCase(request.getField(), "null")
                && !StringUtils.equalsIgnoreCase(request.getOrder(), "null")) {
                //如果排序规则为降序
            if (StringUtils.equals(request.getOrder(), FebsConstant.ORDER_DESC)) {
                //向page添加排序字段OrderItem类的实例(必须这样构造)
                page.addOrder(OrderItem.desc(sortField));
            } else {
                //如果排序规则为升序
                //向page添加排序字段OrderItem类的实例(必须这样构造)
                page.addOrder(OrderItem.asc(sortField));
            }
        } else {//排序字段为空,排序规则为空
                //如果默认的排序字段不为空
            if (StringUtils.isNotBlank(defaultSort)) {
                    //如果默认的排序规则为降序
                if (StringUtils.equals(defaultOrder, FebsConstant.ORDER_DESC)) {
                    page.addOrder(OrderItem.desc(defaultSort));
                } else {
                    //如果默认的排序规则为升序
                    page.addOrder(OrderItem.asc(defaultSort));
                }
            }
        }
    }

    /**
     * 处理排序 for mybatis-plus
     *
     * @param request QueryRequest
     * @param page    Page
     */
    public static void handlePageSort(QueryRequest request, Page<?> page) {
        //默认的排序字段为空、默认的排序规则为空、默认不开启驼峰转下划线
        handlePageSort(request, page, null, null, false);
    }

    /**
     * 处理排序 for mybatis-plus
     *
     * @param request           QueryRequest
     * @param page              Page
     * @param camelToUnderscore 是否开启驼峰转下划线
     */
    public static void handlePageSort(QueryRequest request, Page<?> page, boolean camelToUnderscore) {
        //默认的排序字段为空、默认的排序规则为空
        handlePageSort(request, page, null, null, camelToUnderscore);
    }




    /**
     * 处理排序 for mybatis-plus
     *
     * @param request           QueryRequest
     * @param wrapper           wrapper
     * @param defaultSort       默认排序的字段
     * @param defaultOrder      默认排序规则
     * @param camelToUnderscore 是否开启驼峰转下划线
     */
    public static void handleWrapperSort(QueryRequest request, QueryWrapper<?> wrapper, String defaultSort, String defaultOrder, boolean camelToUnderscore) {
        //需要排序的字段
        String sortField = request.getField();
        //是否开启驼峰转下划线
        if (camelToUnderscore) {
            sortField = FebsUtil.camelToUnderscore(sortField);
            defaultSort = FebsUtil.camelToUnderscore(defaultSort);
        }
        if (StringUtils.isNotBlank(request.getField())//排序字段不为空
                && StringUtils.isNotBlank(request.getOrder())//排序规则不为空,asc升序,desc降序
                && !StringUtils.equalsIgnoreCase(request.getField(), "null")
                && !StringUtils.equalsIgnoreCase(request.getOrder(), "null")) {
             //如果排序规则为降序
            if (StringUtils.equals(request.getOrder(), FebsConstant.ORDER_DESC)) {
                wrapper.orderByDesc(sortField);
            } else {
             //如果排序规则为升序
                wrapper.orderByAsc(sortField);
            }
        } else {//排序字段为空,排序规则为空
                //如果默认的排序字段不为空             
            if (StringUtils.isNotBlank(defaultSort)) {
                    //如果默认的排序规则为降序
                if (StringUtils.equals(defaultOrder, FebsConstant.ORDER_DESC)) {                
                    wrapper.orderByDesc(defaultSort);
                } else {
                    //如果默认的排序规则为升序
                    wrapper.orderByAsc(defaultSort);
                }
            }
        }
    }

    /**
     * 处理排序 for mybatis-plus
     *
     * @param request QueryRequest
     * @param wrapper wrapper
     */
    public static void handleWrapperSort(QueryRequest request, QueryWrapper<?> wrapper) {
        //默认的排序字段为空、默认的排序规则为空、默认不开启驼峰转下划线
        handleWrapperSort(request, wrapper, null, null, false);
    }

    /**
     * 处理排序 for mybatis-plus
     *
     * @param request           QueryRequest
     * @param wrapper           wrapper
     * @param camelToUnderscore 是否开启驼峰转下划线
     */
    public static void handleWrapperSort(QueryRequest request, QueryWrapper<?> wrapper, boolean camelToUnderscore) {
         //默认的排序字段为空、默认的排序规则为空
        handleWrapperSort(request, wrapper, null, null, camelToUnderscore);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值