国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LambdaQueryWrapper 設(shè)置自定義排序

這篇具有很好參考價(jià)值的文章主要介紹了LambdaQueryWrapper 設(shè)置自定義排序。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

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è)置排序出錯(cuò):" + 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實(shí)體類

@Data
public class OrderBy {

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


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

    /**
     * 是否進(jìn)行駝峰轉(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 是否進(jìn)行駝峰轉(zhuǎn)下劃線
     * @return
     */
    public OrderItem getOrderItemToUnder(boolean isToUnder) {
        return getOrderItem(isAsc(), isToUnder);
    }

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

    /**
     * 獲取 OrderItem
     *
     * @param isAsc     是否升序
     * @param isToUnder 是否進(jìn)行駝峰轉(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);
    }

文章來源地址http://www.zghlxwxcb.cn/news/detail-509476.html

到了這里,關(guān)于LambdaQueryWrapper 設(shè)置自定義排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MybatisPlus快速入門及常見設(shè)置

    MybatisPlus快速入門及常見設(shè)置

    目錄 一、快速入門 1.1 準(zhǔn)備數(shù)據(jù) 1.2 創(chuàng)建SpringBoot工程 1.3 使用MP 1.4 獲取Mapper進(jìn)行測試? 二、常用設(shè)置 2.1 設(shè)置表映射規(guī)則 2.1.1 單獨(dú)設(shè)置 2.1.2 全局設(shè)置 2.2 設(shè)置主鍵生成策略? 2.2.1 為什么會(huì)有雪花算法? 2.2.2 垂直分表 2.2.3 水平分表 2.2.4 單獨(dú)設(shè)置 2.2.5 全局設(shè)置 2.3?設(shè)置字段映射

    2024年02月19日
    瀏覽(17)
  • MybatisPlus自定義insertBatchSomeColumn實(shí)現(xiàn)真正批量插入(Oracle)

    MybatisPlus自定義insertBatchSomeColumn實(shí)現(xiàn)真正批量插入(Oracle)

    項(xiàng)目由于插入數(shù)據(jù)量比較大,導(dǎo)致前端請求超時(shí),查看系統(tǒng)代碼發(fā)現(xiàn)是通過循環(huán)單條插入,因此準(zhǔn)備先從輸入批量寫入開始優(yōu)化,通過查詢資料發(fā)現(xiàn)有幾種方式: 1. 通過實(shí)現(xiàn)MybatisPlus IService接口,獲取saveBatch, 底層其實(shí)是單條插入 2. 通過XML手動(dòng)拼接SQL實(shí)現(xiàn)批量插入, 缺點(diǎn)是每

    2024年02月16日
    瀏覽(11)
  • IDEA集成EasyCode插件,快速生成自定義mybatisplus代碼

    IDEA集成EasyCode插件,快速生成自定義mybatisplus代碼

    在idea插件中,搜索EasyCode插件,下載并進(jìn)行安裝。? easyCode插件可以修改作者名稱,即生成代碼后,注釋中自動(dòng)添加相應(yīng)作者的姓名。? Type Mapper指的是生成mapper.xml文件中數(shù)據(jù)庫中的字段和java中代碼的字段以及生成mybatis數(shù)據(jù)之間的類型轉(zhuǎn)換。最常見的形式如下,也就是java中的

    2024年02月06日
    瀏覽(24)
  • mybatisplus在新增或者修改時(shí)設(shè)置字段自動(dòng)填充

    1、需要實(shí)現(xiàn)元對象字段填充控制器抽象類,如下代碼 fieldName要注意對應(yīng)的生成的實(shí)體字段,不是數(shù)據(jù)庫對應(yīng)字段,否則無效 2、在生成的實(shí)體字段,@TableField增加fill填充,并寫入填充的時(shí)機(jī)是新增還是修改 在此過程中可能會(huì)出現(xiàn)的錯(cuò): 修改或者插入的時(shí)候報(bào)類型無效,jav

    2024年01月17日
    瀏覽(19)
  • MyBatisPlus詳解(二)條件構(gòu)造器Wrapper、自定義SQL、Service接口

    MyBatisPlus詳解(二)條件構(gòu)造器Wrapper、自定義SQL、Service接口

    MyBatisPlus詳解系列文章: MyBatisPlus詳解(一)項(xiàng)目搭建、@TableName、@TableId、@TableField注解與常見配置 2.1.1 Wrapper 在BaseMapper接口提供的相關(guān)方法中,除了以id作為where條件, 還支持更加復(fù)雜的where條件,即條件構(gòu)造器Wrapper : Wrapper是條件構(gòu)造器的抽象類,其下有很多默認(rèn)實(shí)現(xiàn),繼承

    2024年04月25日
    瀏覽(27)
  • Mybatisplus 傳參參數(shù)為自定義sql, 使用條件構(gòu)造器作為參數(shù)

    1?pom依賴 2?mapper?接口文件 3 mapper?的xml配置文件 4?查詢 5?測試,生成的兩個(gè)sql語句如下 注意 :不同的版本,可能會(huì)有部分區(qū)別,總之注意下版本

    2024年02月22日
    瀏覽(23)
  • idea 插件 Easy Code 自定義 MybatisPlus 模板一鍵快速生成所需代碼

    idea 插件 Easy Code 自定義 MybatisPlus 模板一鍵快速生成所需代碼

    之前無意中了解到了 idea 中的 Easy Code 插件,說是能快速生成 entity 、mapper、service、controller 等文件,避免很多簡單重復(fù)性的創(chuàng)建工作,大大提高 MySQL 增刪改查的開發(fā)效率。 正好今天要做對 MySQL 的增刪改查,想著試試這個(gè)插件,沒想到,特別好用,但也需要自己定制,所以就

    2023年04月20日
    瀏覽(24)
  • 關(guān)于MyBatisPlus框架下出現(xiàn)xml里面定義的方法無法被正確識別以及提示調(diào)用mysql存儲(chǔ)過程時(shí)參數(shù)無效的問題

    關(guān)于MyBatisPlus框架下出現(xiàn)xml里面定義的方法無法被正確識別以及提示調(diào)用mysql存儲(chǔ)過程時(shí)參數(shù)無效的問題

    網(wǎng)上很多解決方法都是查看函數(shù)名是否一致、命名空間等,但還有一種可能是你調(diào)用接口的模塊本身的resource文件夾下就有一個(gè)含有xml的mapper文件夾,而這個(gè)文件夾里面不含有方法A的sql實(shí)現(xiàn),如下圖: 導(dǎo)致程序只在這個(gè)mapper里面找A的sql實(shí)現(xiàn),那肯定會(huì)提示沒有找到。 除了檢

    2024年02月09日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包