亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中LambdaQueryWrapper設(shè)置自定義排序代碼示例

 更新時間:2023年12月14日 11:20:48   作者:程序猴老王  
這篇文章主要給大家介紹了關(guān)于Java中LambdaQueryWrapper設(shè)置自定義排序的相關(guān)資料,lambdaquerywrapper是MyBatis-Plus框架中的一個查詢條件構(gòu)造器,它可以用于構(gòu)建自定義的查詢條件,需要的朋友可以參考下

MybatisPlus版本

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>3.4.2</version>
</dependency>

定義MybatisPlus工具類

import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.xnt.product.common.core.core.domain.OrderBy;
import com.xnt.product.common.core.exception.CustomException;

import java.util.List;

import static com.baomidou.mybatisplus.core.enums.SqlKeyword.*;

/**
 * @author wxm
 */
public class MybatisPlusUtil {

    /**
     * @param queryWrapper {@link LambdaQueryWrapper}
     * @param column       排序字段
     * @param asc          是否升序
     * @param <T>          泛型
     */
    public static <T> void setOrderOne(LambdaQueryWrapper<T> queryWrapper, String column, boolean asc) {
        try {
            ISqlSegment[] sqlSegments = {ORDER_BY, () -> column, asc ? ASC : DESC};
            queryWrapper.getExpression().add(sqlSegments);
        } catch (Exception e) {
            e.printStackTrace();
            throw new CustomException("設(shè)置排序出錯:" + e.getMessage());
        }
    }

    /**
     * @param queryWrapper {@link LambdaQueryWrapper}
     * @param order        {@link OrderBy} 排序
     * @param <T>          泛型
     */
    public static <T> void setOrder(LambdaQueryWrapper<T> queryWrapper, OrderBy order) {
        setOrderOne(queryWrapper, order.getColumn(), order.isAsc());
    }

    /**
     * @param queryWrapper {@link LambdaQueryWrapper}
     * @param list         {@link OrderBy} 排序
     * @param <T>          泛型
     */
    public static <T> void setOrder(LambdaQueryWrapper<T> queryWrapper, List<OrderBy> list) {
        for (OrderBy order : list) {
            setOrder(queryWrapper, order);
        }
    }

    /**
     * @param queryWrapper {@link LambdaQueryWrapper}
     * @param orderItem    {@link OrderItem} 排序
     * @param <T>          泛型
     */
    public static <T> void setOrderItem(LambdaQueryWrapper<T> queryWrapper, OrderItem orderItem) {
        setOrderOne(queryWrapper, orderItem.getColumn(), orderItem.isAsc());
    }

    /**
     * @param queryWrapper {@link LambdaQueryWrapper}
     * @param list         {@link OrderItem} 排序
     * @param <T>          泛型
     */
    public static <T> void setOrderItem(LambdaQueryWrapper<T> queryWrapper, List<OrderItem> list) {
        for (OrderItem order : list) {
            setOrderItem(queryWrapper, order);
        }
    }
}

定義OrderBy實體類

@Data
public class OrderBy {

    /**
     * 字段名稱
     */
    @NotEmpty
    private String column;


    /**
     * 排序類型 升序:asc 降序:desc
     * 默認(rèn)升序
     */
    private boolean asc = true;

    /**
     * 是否進行駝峰轉(zhuǎn)下劃線
     */
    private boolean toUnder = false;


    public String getColumn() {
        return isToUnder() ? StrUtil.toUnderlineCase(column) : column;
    }

    public String getColumn(boolean toUnder) {
        return toUnder ? StrUtil.toUnderlineCase(column) : column;
    }

    /**
     * 獲取 OrderItem
     *
     * @return
     */
    public OrderItem getOrderItem() {
        return getOrderItem(isAsc(), isToUnder());
    }

    /**
     * 獲取 OrderItem
     *
     * @param isAsc 是否升序
     * @return
     */
    public OrderItem getOrderItem(boolean isAsc) {
        return getOrderItem(isAsc, isToUnder());
    }

    /**
     * 獲取 OrderItem
     *
     * @param isToUnder 是否進行駝峰轉(zhuǎn)下劃線
     * @return
     */
    public OrderItem getOrderItemToUnder(boolean isToUnder) {
        return getOrderItem(isAsc(), isToUnder);
    }

    /**
     * 獲取 OrderItem
     *
     * @param sort      排序方式  升序:asc 降序:desc
     * @param isToUnder 是否進行駝峰轉(zhuǎn)下劃線
     * @return
     */
    public OrderItem getOrderItem(String sort, boolean isToUnder) {
        return getOrderItem(isAsc(), isToUnder);
    }

    /**
     * 獲取 OrderItem
     *
     * @param isAsc     是否升序
     * @param isToUnder 是否進行駝峰轉(zhuǎn)下劃線
     * @return
     */
    public OrderItem getOrderItem(boolean isAsc, boolean isToUnder) {
        String col = isToUnder ? StrUtil.toUnderlineCase(column) : column;
        return OrderItemUtils.getOrder(col, isAsc);
    }

    /**
     * 獲取sql
     * @return
     */
    public String getSql(){
        return (isToUnder() ? StrUtil.toUnderlineCase(column) : column) + (this.isAsc()? " asc":" desc");
    }
 }

使用自定義排序

1、獲取前段參數(shù)

public List<OrderBy> getOrderBys() {
        String order = ServletUtils.getParameter(PageConstants.ORDER);
        if (ObjectUtil.isEmpty(order)) {
            return null;
        }
        List<OrderBy> orderByList = new ArrayList<>();
        if (JsonUtil.isTypeJSONArray(order)) {
            orderByList.addAll(JsonUtil.toList(order, OrderBy.class));
        } else {
            orderByList.add(JsonUtil.parse(order, OrderBy.class));
        }
        return orderByList;
    }

2、調(diào)用工具類

public List<SysOperLog> getList(SysOperLog operLog) {
        LambdaQueryWrapper<SysOperLog> lambda = getLambda();
   
        List<OrderItem> list = getOrderItems();
        if (ObjectUtils.isNotEmpty(list)) {
            MybatisPlusUtil.setOrderItem(lambda, list);
        } else {
            lambda.orderByDesc(SysOperLog::getOperTime);
        }
        return super.list(lambda);
    }

總結(jié) 

到此這篇關(guān)于Java中LambdaQueryWrapper設(shè)置自定義排序的文章就介紹到這了,更多相關(guān)LambdaQueryWrapper設(shè)置自定義排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Shiro中session超時頁面跳轉(zhuǎn)的處理方式

    Shiro中session超時頁面跳轉(zhuǎn)的處理方式

    這篇文章主要介紹了Shiro中session超時頁面跳轉(zhuǎn)的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringBoot統(tǒng)計接口調(diào)用耗時的三種方式

    SpringBoot統(tǒng)計接口調(diào)用耗時的三種方式

    在實際開發(fā)中,了解項目中接口的響應(yīng)時間是必不可少的事情,SpringBoot 項目支持監(jiān)聽接口的功能也不止一個,接下來我們分別以 AOP、ApplicationListener、Tomcat 三個方面去實現(xiàn)三種不同的監(jiān)聽接口響應(yīng)時間的操作,需要的朋友可以參考下
    2024-06-06
  • 實戰(zhàn)分布式醫(yī)療掛號通用模塊統(tǒng)一返回結(jié)果異常日志處理

    實戰(zhàn)分布式醫(yī)療掛號通用模塊統(tǒng)一返回結(jié)果異常日志處理

    這篇文章主要為大家介紹了實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之統(tǒng)一返回結(jié)果統(tǒng)一異常處理,統(tǒng)一日志處理到通用模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-04-04
  • Spring學(xué)習(xí)筆記3之消息隊列(rabbitmq)發(fā)送郵件功能

    Spring學(xué)習(xí)筆記3之消息隊列(rabbitmq)發(fā)送郵件功能

    這篇文章主要介紹了Spring學(xué)習(xí)筆記3之消息隊列(rabbitmq)發(fā)送郵件功能的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • 如何使用Resttemplate和Ribbon調(diào)用Eureka實現(xiàn)負(fù)載均衡

    如何使用Resttemplate和Ribbon調(diào)用Eureka實現(xiàn)負(fù)載均衡

    這篇文章主要介紹了如何使用Resttemplate和Ribbon調(diào)用Eureka實現(xiàn)負(fù)載均衡,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java接入支付寶授權(quán)第三方登錄的完整步驟

    Java接入支付寶授權(quán)第三方登錄的完整步驟

    不管是支付寶支付,還是微信支付,還是銀聯(lián)支付等,大部分的支付流程都是相似的,這篇文章主要給大家介紹了關(guān)于Java接入支付寶授權(quán)第三方登錄的相關(guān)資料,使用支付寶的沙盒環(huán)境示例,需要的朋友可以參考下
    2021-07-07
  • IDEA項目重命名的操作

    IDEA項目重命名的操作

    這篇文章主要介紹了IDEA項目重命名的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java?Kryo,Protostuff,Hessian序列化方式對比

    Java?Kryo,Protostuff,Hessian序列化方式對比

    這篇文章主要介紹了Java?Kryo,Protostuff,Hessian序列化方式對比,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Java輸入學(xué)號、姓名、年齡并對其進行輸出的實現(xiàn)方法

    Java輸入學(xué)號、姓名、年齡并對其進行輸出的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Java輸入學(xué)號、姓名、年齡并對其進行輸出的實現(xiàn)方法,在計算機編程中,輸出學(xué)號和姓名是一個常見的任務(wù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • Java利用MD5加鹽實現(xiàn)對密碼進行加密處理

    Java利用MD5加鹽實現(xiàn)對密碼進行加密處理

    在開發(fā)的時候,有一些敏感信息是不能直接通過明白直接保存到數(shù)據(jù)庫的。最經(jīng)典的就是密碼了。如果直接把密碼以明文的形式入庫,不僅會泄露用戶的隱私,對系統(tǒng)也是極其的不厲。本文就來和大家介紹一下如何對密碼進行加密處理,感興趣的可以了解一下
    2023-02-02

最新評論