按照狀態實現自定義排序的方法

方法一:使用 MyBatis-Plus 的 QueryWrapper 自定義排序

在查詢時動態構建排序規則,通過 CASE WHEN 語句實現優先級排序:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;@Service
public class ProjectConfigService {public List<ProjectConfigEntity> listProjectsByStatusPriority() {// 自定義排序:進行中(1) > 已完成(2) > 待啟動(0)QueryWrapper<ProjectConfigEntity> queryWrapper = new QueryWrapper<>();queryWrapper.orderByAsc("CASE " +"WHEN project_status = 1 THEN 1 " +  // 進行中排第一"WHEN project_status = 2 THEN 2 " +  // 已完成排第二"ELSE 3 END");                      // 待啟動排第三return projectConfigMapper.selectList(queryWrapper);}
}

方法二:在實體類中使用 @TableField 注解添加默認排序

如果你希望所有查詢都自動應用此排序規則,可以在實體類中添加默認排序注解:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;
import lombok.Data;@Data
@TableName("dste_project_config_new")
public class ProjectConfigEntity implements Serializable {private static final long serialVersionUID = 1L;// 其他字段保持不變.../*** 項目狀態(0:待啟動,1:進行中,2:已完成)*/@TableField(value = "project_status", condition = "%s = CASE WHEN project_status = 1 THEN 1 " +"WHEN project_status = 2 THEN 2 " +"ELSE 3 END")private Integer projectStatus;
}

方法三:使用自定義 SQL 查詢

如果你需要更復雜的排序邏輯,可以在 Mapper 接口中定義自定義 SQL:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;public interface ProjectConfigMapper extends BaseMapper<ProjectConfigEntity> {@Select("SELECT * FROM dste_project_config_new " +"ORDER BY CASE " +"WHEN project_status = 1 THEN 1 " +"WHEN project_status = 2 THEN 2 " +"ELSE 3 END")List<ProjectConfigEntity> selectProjectsByStatusPriority();
}

方法四:使用 MyBatis-Plus 的 LambdaQueryWrapper自定義排序

    public List<ProjectConfigEntity> listProjectsByStatusPriority() {// 使用LambdaQueryWrapper實現類型安全的自定義排序LambdaQueryWrapper<ProjectConfigEntity> wrapper = new LambdaQueryWrapper<>();wrapper.orderByAsc(true, "CASE " +"WHEN project_status = 1 THEN 1 " +  // 進行中排第一"WHEN project_status = 2 THEN 2 " +  // 已完成排第二"ELSE 3 END");return projectConfigMapper.selectList(wrapper);}

方法五:避免硬編碼表字段名,可以結合實體類的屬性名和 SQL 片段

	LambdaQueryWrapper<ProjectConfigEntity> wrapper = new LambdaQueryWrapper<>();String statusSortSql = String.format("CASE " +"WHEN %s = 1 THEN 1 " +"WHEN %s = 2 THEN 2 " +"ELSE 3 END",StringUtils.camelToUnderline(ProjectConfigEntity::getProjectStatus), // 駝峰轉下劃線StringUtils.camelToUnderline(ProjectConfigEntity::getProjectStatus));wrapper.orderByAsc(true, statusSortSql);

排序原理說明

以上五種方法均基于 SQL 的 CASE WHEN 語句實現自定義排序:

  1. 進行中(狀態值=1):優先級最高,排序值為 1
  2. 已完成(狀態值=2):優先級次之,排序值為 2
  3. 待啟動(狀態值=0):優先級最低,排序值為 3

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82974.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82974.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82974.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計算機網絡】IPv6和NAT網絡地址轉換

IPv6 IPv6協議使用由單/雙冒號分隔一組數字和字母&#xff0c;例如2001:0db8:85a3:0000:0000:8a2e:0370:7334&#xff0c;分成8段。IPv6 使用 128 位互聯網地址&#xff0c;有 2 128 2^{128} 2128個IP地址無狀態地址自動配置&#xff0c;主機可以通過接口標識和網絡前綴生成全…

【Redis】string

String 字符串 字符串類型是 Redis 最基礎的數據類型&#xff0c;關于字符串需要特別注意&#xff1a; 首先 Redis 中所有的鍵的類型都是字符串類型&#xff0c;而且其他幾種數據結構也都是在字符串的基礎上構建的。字符串類型的值實際可以是字符串&#xff0c;包含一般格式的…

基于ELK的分布式日志實時分析與可視化系統設計

目錄 一、ELK平臺介紹 1.ELK概述 2.Elasticsearch 3.Logstash 4.Kibana 二、部署ES群集 1.資源清單 2.基本配置 3.安裝Elasticsearch&#xff08;elk1上、elk2上、elk3上&#xff09; 4.安裝logstash&#xff08;elk1上&#xff09; 5.Filebeat 6.安裝Kibana&#x…

電機控制選 STM32 還是 DSP?技術選型背后的現實博弈

現在搞電機控制&#xff0c;圈里人都門兒清 —— 主流方案早就被 STM32 這些 Cortex-M 單片機給拿捏了。可要是撞上系統里的老甲方&#xff0c;技術認知還停留在諾基亞砸核桃的年代&#xff0c;非揪著 DSP 不放&#xff0c;咱也只能賠笑臉&#xff1a;“您老說的對&#xff0c;…

【案例分享】藍牙紅外線影音遙控鍵盤:瑞昱RTL8752CJF

藍牙紅外線影音遙控鍵盤 Remotec的無線控制鍵盤采用瑞昱藍牙RTL8752CJF解決方案&#xff0c;透過藍牙5.0與手機配對后&#xff0c;連線至 Remotec 紅外 code server 取得對應影音視覺設備的紅外 code后&#xff0c;即可控制多達2個以上的影音視覺設備&#xff0c;像是智能電視…

PostgreSQL如何更新和刪除表數據

這節說下怎樣更新和刪除表數據&#xff0c;當然認識命令了&#xff0c;可以問AI幫忙寫。 接上節先看下天氣表weather的數據&#xff0c;增加了杭州和西安的數據&#xff1a; 一.UPDATE更新命令 用UPDATE命令更新現有的行。 假設所有 杭州 5月12日的溫度低了兩度&#xff0c;用…

簡單三步FastAdmin 開源框架的安裝

簡單三步FastAdmin 開源框架的安裝 第一步&#xff1a;新建站點1&#xff0c;在寶塔面板中&#xff0c;創建一個新的站點&#xff0c;并填寫項目域名。 第二步&#xff1a;上傳框架1&#xff0c;框架下載2&#xff0c;上傳解壓縮 第三步&#xff1a;配置并安裝1&#xff0c;進入…

使用 pytesseract 構建一個簡單 OCR demo

簡介 pytesseract 庫是 Google Tesseract OCR &#xff08;光學字符識別&#xff09;引擎的一個 Python 封裝庫&#xff0c;使用廣泛且功能強大。 構建 使用 pytesseract 構建一個簡單 OCR demo。 步驟一&#xff1a;安裝必要的庫 您需要在您的 Python 環境中安裝 pytessera…

十三: 神經網絡的學習

這里所說的“學習”是指從訓練數據中自動獲取最優權重參數的過程。為了使神經網絡能進行學習&#xff0c;將導入損失函數這一指標。而學習的目的就是以該損失函數為基準&#xff0c;找出能使它的值達到最小的權重參數。為了找出盡可能小的損失函數的值&#xff0c;我們將介紹利…

AWS 創建VPC 并且添加權限控制

AWS 創建VPC 并且添加權限控制 以下是完整的從0到1在AWS中創建VPC并配置權限的步驟&#xff08;包含網絡配置、安全組權限和實例訪問&#xff09;&#xff1a; 1. 創建VPC 步驟&#xff1a; 登錄AWS控制臺 訪問 AWS VPC控制臺&#xff0c;點擊 創建VPC。 配置基礎信息 名稱…

ICASSP2025丨融合語音停頓信息與語言模型的阿爾茲海默病檢測

阿爾茲海默病&#xff08;Alzheimers Disease, AD&#xff09;是一種以認知能力下降和記憶喪失為特征的漸進性神經退行性疾病&#xff0c;及早發現對于其干預和治療至關重要。近期&#xff0c;清華大學語音與音頻技術實驗室&#xff08;SATLab&#xff09;提出了一種將停頓信息…

C# 導出word 插入公式問題

最近遇到了一個問題&#xff0c;下載一個文檔時需要下載word可編輯的公式。找了很久終于找到了一種解決辦法。下面是以C#代碼來實現在Word中插入公式的功能。 目錄 一、引入dll程序集文件1、通過 NuGet 引入dll&#xff08;2種方法&#xff09;的方法&#xff1a;2、手動添加d…

智匯云舟攜最新無人機2D地圖快速重建技術亮相廣西國際礦業展覽會

5月22至25日&#xff0c;廣西國際礦業展覽會&#xff08;以下簡稱 “礦業展”&#xff09;在南寧國際會展中心成功舉辦。智匯云舟與合作伙伴廣西空馭數智信息技術有限公司攜無人機 2D地圖快速重建技術&#xff0c;以及視頻孿生智慧礦山解決方案參會&#xff0c;為礦山行業數字化…

OpenSSL 簽名驗證詳解:PKCS7* p7、cafile 與 RSA 驗簽實現

OpenSSL 簽名驗證詳解&#xff1a;PKCS7* p7、cafile 與 RSA 驗簽實現 摘要 本文深入剖析 OpenSSL 中 PKCS7* p7 數據結構和 cafile 的作用及相互關系&#xff0c;詳細講解基于 OpenSSL 的 RSA 驗簽字符串的 C 語言實現&#xff0c;涵蓋簽名解析、證書加載、驗證流程及關鍵要…

9:OpenCV—模板匹配

模版匹配 1、模板匹配概念 模板匹配是一項在一副圖像中尋找與另一幅模板圖像最匹配&#xff08;相似&#xff09;部分的技術。模板匹配不是基于直方圖的&#xff0c;而是通過在輸入圖像上滑動圖像塊&#xff08;模板&#xff09;同時對比相似度&#xff0c;來對模板和輸入圖像…

Composer 常規操作說明與問題處理

目錄 一、 Composer 簡介&#xff0c;安裝二、全局配置三、項目配置&#xff08;composer.json&#xff09;3.1 composer.json 文件1. 基礎字段信息2. **require&#xff08;生產環境依賴&#xff09;**3. **require-dev&#xff08;開發環境依賴&#xff09;** 3.2 composer.l…

Spring Boot 3.0與Java 17:企業級應用開發的新范式

引言 隨著Spring Boot 3.0和Java 17的正式發布&#xff0c;企業級應用開發迎來了新的技術范式。這兩項技術的結合不僅帶來了性能提升&#xff0c;還引入了眾多現代化的編程特性&#xff0c;為開發者提供了更強大、更高效的開發體驗。本文將深入探討Spring Boot 3.0與Java 17的…

Vue 組件 - 指令

Vue 漸進式JavaScript 框架 基于Vue2的學習筆記 - Vue指令 目錄 指令寫法 自定義指令 簡單封裝指令 指令傳遞字符串 update事件 指令應用 指令實現輪播 指令函數簡寫 指令函數列表 bind inserted update componentUpdated unbind Vue3指令輪播 nextick 總結 指…

5.28 后端面經

為什么golang在并發環境下更有優勢 Go語言&#xff08;Golang&#xff09;在并發環境下的優勢主要源自其設計哲學和內置的并發機制&#xff0c;這些機制在語言層面提供了高效、簡潔且安全的并發編程工具。以下是其核心優勢的詳細分析&#xff1a; 1. Goroutine&#xff1a;輕量…

Linux線程入門

目錄 Linux線程概念 什么是線程 重新理解進程 線程的優點 線程的缺點 線程的異常 線程用途 Linux線程概念 什么是線程 在一個程序里的一個執行路線就叫做線程&#xff08;thread&#xff09;。更準確的定義是&#xff1a;線程是“一個進程內部的控制序列”。一切進程至…