最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis-Plus中實(shí)現(xiàn)自定義復(fù)雜排序邏輯

 更新時(shí)間:2026年07月22日 09:50:09   作者:Mcband  
本文手把手教你用QueryWrapper的last方法結(jié)合SQL片段,實(shí)現(xiàn)類似“X-YYY”格式字段的特殊排序,讓特殊值排最后,并按數(shù)值排序,感興趣的可以了解一下

在使用MyBatis-Plus進(jìn)行數(shù)據(jù)庫操作時(shí),有時(shí)我們需要根據(jù)復(fù)雜的條件進(jìn)行數(shù)據(jù)排序,特別是當(dāng)排序條件不僅僅基于單一字段,而是需要多個(gè)字段和特定的排序規(guī)則時(shí)。本文將通過一個(gè)實(shí)際的例子說明如何在MyBatis-Plus中實(shí)現(xiàn)這種復(fù)雜的排序邏輯。

場景描述

假設(shè)我們有一個(gè)車輛保險(xiǎn)信息的查詢功能,需要根據(jù)gateNo進(jìn)行排序。gateNo字段的格式為X-YYY,其中X可以是數(shù)字或特殊字符串(如“天”),YYY是一個(gè)數(shù)字。我們的目標(biāo)是按X的數(shù)值排序,將X為“天”的情況排在最后,同時(shí)YYY也需要按數(shù)值進(jìn)行排序。

解決方案

在MyBatis-Plus中,QueryWrapper提供了豐富的方法來構(gòu)建查詢條件,但對(duì)于復(fù)雜的排序邏輯,我們需要利用原始SQL片段來實(shí)現(xiàn)。以下是具體的實(shí)現(xiàn)步驟和代碼:

步驟1:定義QueryWrapper

首先,我們創(chuàng)建一個(gè)QueryWrapper實(shí)例。如果查詢模型(model)為空,我們直接返回一個(gè)空的QueryWrapper實(shí)例。

QueryWrapper<VCzInsuranceEntity> queryWrapper = new QueryWrapper<>();
if (model == null) {
    return queryWrapper;
}

步驟2:添加自定義排序邏輯

為了根據(jù)gateNo進(jìn)行排序,我們使用last方法來添加自定義的SQL排序片段。這里使用CASE語句來處理特殊值“天”,并使用CAST函數(shù)和SUBSTRING_INDEX來分離和轉(zhuǎn)換字符串為數(shù)值。

String customOrderSql = "CASE WHEN gate_no LIKE '天-%' THEN 2 ELSE 1 END, " +
    "CAST(SUBSTRING_INDEX(gate_no, '-', 1) AS UNSIGNED), " +
    "CAST(SUBSTRING_INDEX(gate_no, '-', -1) AS UNSIGNED)";
queryWrapper.last("ORDER BY " + customOrderSql);

詳細(xì)解釋

  1. 特殊值處理:

使用 CASE 語句判斷 gate_no 是否以“天-”開頭。如果是,則賦值為 2,這樣的記錄會(huì)被排在查詢結(jié)果的最后。

  1. 按 X 排序:

使用 SUBSTRING_INDEX 函數(shù)提取 gate_no 中 ‘-’ 前的部分(即 X),然后用 CAST 函數(shù)將其轉(zhuǎn)換為無符號(hào)整數(shù),確保按數(shù)值進(jìn)行排序。

  1. 按 YYY 排序:

同樣使用 SUBSTRING_INDEX 函數(shù)但這次提取 ‘-’ 后的部分(即 YYY),再通過 CAST 進(jìn)行數(shù)值轉(zhuǎn)換,保證在相同的 X 內(nèi)部,根據(jù) YYY 的值進(jìn)行排序。

步驟3:添加其他查詢條件

在實(shí)際的應(yīng)用場景中,除了排序之外,我們通常還需要根據(jù)多個(gè)字段添加過濾條件。例如,我們可以根據(jù)車輛ID、所有者ID和其他相關(guān)字段來過濾數(shù)據(jù)。這里為了簡化,我們只展示幾個(gè)示例條件:

queryWrapper
    .eq(model.getCarId() != null && model.getCarId() != 0, "car_id", model.getCarId())
    .like(StringUtils.isNotBlank(model.getLicensePlate()), "license_plate", model.getLicensePlate());

完整方法

將以上步驟組合,我們得到了一個(gè)完整的方法,用于構(gòu)建帶有自定義排序的查詢包裝器:

@Override
public QueryWrapper<VCzInsuranceEntity> onSelectWhere(VCzInsuranceEntity model) {
    QueryWrapper<VCzInsuranceEntity> queryWrapper = new QueryWrapper<>();
    if (model == null) {
        return queryWrapper;
    }

    String customOrderSql = "CASE WHEN gate_no LIKE '天-%' THEN 2 ELSE 1 END, " +
        "CAST(SUBSTRING_INDEX(gate_no, '-', 1) AS UNSIGNED), " +
        "CAST(SUBSTRING_INDEX(gate_no, '-', -1) AS UNSIGNED)";
    queryWrapper.last("ORDER BY " + customOrderSql);

    queryWrapper
        .eq(model.getCarId() != null && model.getCarId() != 0, "car_id", model.getCarId())
        .like(StringUtils.isNotBlank(model.getLicensePlate()), "license_plate", model.getLicensePlate());

    return queryWrapper;
}

到此這篇關(guān)于MyBatis-Plus中實(shí)現(xiàn)自定義復(fù)雜排序邏輯的文章就介紹到這了,更多相關(guān)MyBatisPlus自定義復(fù)雜排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Swagger接口文檔和常用注解的使用

    詳解Swagger接口文檔和常用注解的使用

    Swagger是一款遵循?Restful?風(fēng)格的接口文檔開發(fā)神器,支持基于?API?自動(dòng)生成接口文檔。本文將為大家講講Swagger接口文檔和常用注解的使用方法,需要的可以參考一下
    2022-08-08
  • 詳解Spring Security中權(quán)限注解的使用

    詳解Spring Security中權(quán)限注解的使用

    這篇文章主要為大家詳細(xì)介紹一下Spring Security中權(quán)限注解的使用方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定參考價(jià)值,需要的可以參考一下
    2022-05-05
  • SpringBoot接收數(shù)組參數(shù)和集合參數(shù)方式

    SpringBoot接收數(shù)組參數(shù)和集合參數(shù)方式

    這篇文章主要介紹了SpringBoot接收數(shù)組參數(shù)和集合參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java設(shè)計(jì)模式中的適配器模式

    Java設(shè)計(jì)模式中的適配器模式

    這篇文章主要介紹了Java設(shè)計(jì)模式中的適配器模式, 適配器模式是將一個(gè)類的接口適配成用戶所期待的,一個(gè)適配允許通常因?yàn)榻涌诓患嫒荻荒茉谝黄鸸ぷ鞯念惞ぷ髟谝黄?做法是將類自己的接口包裹在一個(gè)已存在的類中,需要的朋友可以參考下
    2024-01-01
  • SpringCloud整合OpenFeign問題

    SpringCloud整合OpenFeign問題

    這篇文章主要介紹了SpringCloud整合OpenFeign問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java分形繪制科赫雪花曲線(科赫曲線)代碼分享

    java分形繪制科赫雪花曲線(科赫曲線)代碼分享

    部分與整體以某種形式相似的形,稱為分形,科赫曲線是一種外形像雪花的幾何曲線,所以又稱為雪花曲線,它是分形曲線中的一種,畫法如下
    2013-12-12
  • Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問題

    Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問題

    這篇文章主要介紹了Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Springboot整合Ollama實(shí)現(xiàn)調(diào)用本地多模型

    Springboot整合Ollama實(shí)現(xiàn)調(diào)用本地多模型

    想知道如何用ollama快速安裝和調(diào)用大模型嗎,本文帶你從ollama官網(wǎng)搜索模型、使用powershell命令一鍵安裝,到springboot項(xiàng)目中引入依賴、配置參數(shù)、編寫服務(wù),最后通過controller測試接口,輕松實(shí)現(xiàn)ollama大模型的本地部署和api調(diào)用,需要的朋友可以參考下
    2026-07-07
  • Java實(shí)現(xiàn)多層文件夾壓縮功能

    Java實(shí)現(xiàn)多層文件夾壓縮功能

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言進(jìn)行多層文件夾壓縮功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • SpringBoot全局異常處理之解決404/500錯(cuò)誤

    SpringBoot全局異常處理之解決404/500錯(cuò)誤

    在搭建項(xiàng)目框架的時(shí)候用的是springboot,想統(tǒng)一處理異常,但是發(fā)現(xiàn)404的錯(cuò)誤總是捕捉不到,總是返回的是springBoot自帶的錯(cuò)誤結(jié)果信息,這篇文章主要給大家介紹了關(guān)于SpringBoot全局異常處理之解決404/500錯(cuò)誤的相關(guān)資料,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

姜堰市| 石泉县| 云霄县| 凤山市| 余江县| 伊川县| 衡南县| 南江县| 子长县| 吉林省| 龙岩市| 进贤县| 莱芜市| 菏泽市| 年辖:市辖区| 河曲县| 阿克| 苏尼特左旗| 米易县| 伊川县| 桓台县| 原阳县| 讷河市| 香港| 沙雅县| 四川省| 荥阳市| 平湖市| 湟源县| 信宜市| 延寿县| 台北县| 大渡口区| 西乡县| 绵竹市| 德惠市| 新津县| 临江市| 沅陵县| 靖州| 桑植县|