使用 Java 和 MyBatis 實現動態排序的多表查詢

相關

java實現一個根據字段和排序方式進行排序
java實現自定義排序
自定義動態排序

前言

在Web開發中,前端通常會傳遞一些參數來決定數據的排序方式,例如排序字段和排序方向。本文將展示如何在 Java 項目中結合 MyBatis 實現動態排序,尤其是在涉及多表查詢的情況下。我們將重點關注如何處理從前端傳遞的駝峰命名法字段,并將其轉換為 SQL 能識別的下劃線命名法字段。

準備工作

假設我們有兩個表 data 和 user,需要進行聯合查詢,并根據前端傳遞的字段進行排序。我們的項目結構如下:
1.工具類:用于處理字段的命名轉換和生成排序 SQL 片段。
2. MyBatis Mapper:定義 SQL 查詢。
3. 控制器:處理前端請求,并調用相應的 Mapper 方法。

創建工具類

public class OrderByPageUtils {/*** 將駝峰命名法轉換為下劃線命名法** @param camelCaseString 駝峰命名的字符串* @return 下劃線命名的字符串*/public static String convertCamelToSnake(String camelCaseString) {StringBuilder result = new StringBuilder();for (char ch : camelCaseString.toCharArray()) {if (Character.isUpperCase(ch)) {result.append('_').append(Character.toLowerCase(ch));} else {result.append(ch);}}return result.toString();}/*** 根據前端傳遞的字段、排序方向和表別名生成排序 SQL 片段** @param sortField     排序字段* @param sortDirection 排序方向 ("asc" 或 "desc")* @param tableAlias    表別名* @return 排序 SQL 片段*/public static String getSortSql(String sortField, String sortDirection, String tableAlias) {if (sortField == null || sortDirection == null) {return "";}// 將駝峰命名法轉換為下劃線命名法String snakeCaseField = convertCamelToSnake(sortField);// 過濾排序字段,確保只有字母、數字和下劃線String sanitizedSortField = snakeCaseField.replaceAll("[^a-zA-Z0-9_]", "");String sanitizedSortDirection = "asc".equalsIgnoreCase(sortDirection) ? "ASC" : "DESC";if (sanitizedSortField.isEmpty()) {return "";}// 加上表別名if (tableAlias != null && !tableAlias.isEmpty()) {sanitizedSortField = tableAlias + "." + sanitizedSortField;}return " ORDER BY " + sanitizedSortField + " " + sanitizedSortDirection;}
}

Mapper層

List<xxxxVO> selectTableList(@Param("sql") String sql);

配置 MyBatis Mapper XML

<select id = "selectTableList" resultType="xxx.VO">select a.id,b.name from data as ainner join user as b on a.user_id = b.user_id<if test = "sql != null and sql != ''">${sql}</if>
</select>

業務處理

// ... 業務處理
String sql = OrderByPageUtils.getSortSql(orderField.getSortField(), orderField.getSortDirection(), "a");// dao
mapper.selectTableList(sql);

結論

通過上述步驟,我們實現了一個完整的解決方案,能夠處理前端傳遞的駝峰命名法字段,并在 SQL 查詢中動態排序。這種方法不僅適用于簡單查詢,也可以擴展到復雜的多表查詢。

關鍵點總結:

命名轉換:通過工具類將駝峰命名法轉換為下劃線命名法。
動態 SQL 拼接:在 MyBatis Mapper XML 配置和接口中使用動態 SQL。
控制器處理:接收前端參數并調用相應的服務進行查詢。
這種方法確保了代碼的可維護性和靈活性,適用于各種復雜的查詢場景。希望這篇博客對你有所幫助,讓你在實際開發中能夠輕松應對動態排序的需求。

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

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

相關文章

MySQL-性能分析

1、數據庫服務器的優化步驟 2、查看系統性能參數 可以使用show status語句查詢一些MySQL數據庫服務器的性能參數 執行頻率語法格式&#xff1a;show [ global | session ] status like 參數 &#xff1b;常用性能參數如下所示 參數名說明connection連接MySQL服務器的次數upti…

Autodesk 3ds Max下載,3ds MAX 2024三維建模渲染軟件安裝包下載安裝

3ds MAX中文版&#xff0c;其強大的功能和靈活的操作為廣大用戶提供了無限的創意空間&#xff0c;使得高質量動畫、最新游戲、設計效果等領域的制作需求得以完美滿足。 ? 作為一款三維建模軟件&#xff0c;3ds MAX中文版具備極高的建模精度和渲染質量。它支持多種建模方式&am…

【Fiddler抓包工具】第四節.斷點設置和弱網測試

文章目錄 前言一、斷點設置 1.1 全局斷點 1.2 局部斷點 1.3 打斷點的幾種常用命令 1.4 篡改響應報文二、弱網測試 2.1 網絡限速 2.2 精準限速總結 前言 一、斷點設置 1.1 全局斷點 特點&#xff1a; 中斷Fiddler捕獲的所有請求&#xff0c;包括…

記錄一次prometheus因時區不同導致的無法獲取數據問題

一、故障出現原因 prometheus機器壓力過大&#xff0c;內存耗盡&#xff0c;負載飆高&#xff0c;導致無法登錄&#xff1b; 于是從公有云web界面進行重啟&#xff0c;重啟后內存還是不足&#xff0c;負載很快升高&#xff1b; 對機器進行配置變更&#xff0c;由4C8G升級為4…

在鏈游中,智能合約如何被用于實現游戲內的各種功能

隨著區塊鏈技術的快速發展&#xff0c;鏈游&#xff08;Blockchain Games&#xff09;作為區塊鏈技術的重要應用領域之一&#xff0c;正逐漸展現出其獨特的魅力和優勢。其中&#xff0c;智能合約作為鏈游的核心技術之一&#xff0c;對于實現游戲內的各種功能起到了至關重要的作…

【C++初階】—— 類和對象 (下)

&#x1f4dd;個人主頁&#x1f339;&#xff1a;EterNity_TiMe_ ?收錄專欄?&#xff1a;C “ 登神長階 ” &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f339; 類和對象 1. 運算符重載運算符重載賦值運算符重載前置和后置重載 2. 成員函數的補充3. 初始化列…

Java的函數式接口和 Lambda 表達式

在 Java 8 中&#xff0c;可以通過使用函數式接口和 Lambda 表達式來實現類似 JavaScript 中將函數作為參數傳遞的功能。 以下是一個簡單的示例&#xff0c;演示如何在 Java 中使用函數式接口將函數作為參數傳遞&#xff1a; 定義一個函數式接口&#xff08;函數式接口是只有…

CentOS上升級glibc2.17至glibc2.31

glibc是Linux系統中的重要組件之一。在CentOS中&#xff0c;glibc通常是作為系統的默認C標準庫使用的&#xff0c;因為它是許多軟件的基礎庫。在CentOS中&#xff0c;glibc的版本通常與CentOS版本一起發布。因為CentOS通常會優先選擇穩定性而不是最新性&#xff0c;所以CentOS使…

Vue項目如何進行XSS防護

前言 在目前主推網絡安全的情況下&#xff0c;很多開發項目都需要在上線前進行滲透測試&#xff0c;當符合滲透測試標準及沒有安全漏洞即可正常上線&#xff0c;當前還會有代碼審計的&#xff0c;這個另當別論。 如何對XSS進行防護 在很多的富文本編輯器項目中&#xff0c;x…

leecode熱題100---994:腐爛的橘子

題目&#xff1a; 在給定的 m x n 網格 grid 中&#xff0c;每個單元格可以有以下三個值之一&#xff1a; 值 0 代表空單元格&#xff1b; 值 1 代表新鮮橘子&#xff1b; 值 2 代表腐爛的橘子。 每分鐘&#xff0c;腐爛的橘子 周圍 4 個方向上相鄰 的新鮮橘子都會腐爛。 返回…

C++之第九課

課程列表 今天&#xff0c;我們要學習一種結構&#xff1a;循環結構。 循環的方法有3種。 今天先將第1種for學了&#xff1a; int a;//循環變量 int b; for(a1;a<10;a){//像if那樣“打包”cout<<a<<" ";b; } 當然&#xff0c;也可以這樣寫&#…

【MySQL精通之路】InnoDB(5)-內存結構

總目錄&#xff1a; 【MySQL精通之路】InnoDB存儲引擎-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】InnoDB(4)-架構圖-CSDN博客 目錄 ?編輯 1 緩存池&#xff08;Buffer Pool&#xff09; 1.1 緩存池LRU算法 1.2 緩存區配置 1.3 使用InnoDB標準監視器監視緩存池 …

SSRF服務端請求偽造漏洞原理與修復及靶場實踐

SSRF服務端請求偽造漏洞原理與修復及靶場實踐 SSRF漏洞原理與檢測 SSRF&#xff08;Server-Side Request Forgery&#xff0c;服務器端請求偽造&#xff09;漏洞是一種因為服務端提供了遠程訪問服務&#xff0c;而并未對請求目標進行限制或限制不嚴格而引起的安全漏洞&#x…

Java Apache Jexl規則引擎初體驗

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、模板引擎的選擇&#xff1f;二、什么是JEXL規則引擎&#xff1f;優點缺點 三、其他規則引擎四、示例1.引入依賴2.方法示例3、代碼解釋4、效果![import java…

VMware虛擬機Ubuntu 22.04.4 LTS系統 NAT網絡設置異常解決

現象&#xff1a; 近日&#xff0c;一直工作正常的虛擬機莫名出現網絡無法連接的情況。 參考網上的各種教程&#xff0c;終于解決問題。 如遇到類似情況的&#xff0c;可以嘗試這個方式&#xff0c;看能否解決問題。 網絡連接&#xff1a;采用NAT模式 異常&#xff1a;網絡圖標…

C++數據結構——哈希表

前言&#xff1a;本篇文章將繼續進行C數據結構的講解——哈希表。 目錄 一.哈希表概念 二.哈希函數 1.除留取余法 三.哈希沖突 1.閉散列 線性探測 &#xff08;1&#xff09;插入 &#xff08;2&#xff09;刪除 2. 開散列 開散列概念 四.閉散列哈希表 1.基本框架 …

場內期權怎么開戶?傭金手續費最低是多少?

今天期權懂帶你了解場內期權怎么開戶&#xff1f;傭金手續費最低是多少&#xff1f;我國的首個場內期權是50ETF期權&#xff0c;隨著投資者對期權產品日漸熟悉&#xff0c;投資者參與數量與交易量穩步增長。 場內期權怎么開戶&#xff1f; 滿足資金要求&#xff1a;根據監管要…

自動打卡腳本

奕輔導自動打卡腳本 打卡腳本&#xff0c;使用前需手動打卡一次并需要抓包&#xff0c;在其中找到相關的token。 # -*- encoding:utf-8 -*-import requests import jsonpunch_in_data {"questionnairePublishEntityId": "1001640744275339000980000000001&qu…

MyBatis:Parameter Maps collection does not contain value for 報錯解決收錄

MyBatis&#xff1a;Parameter Maps collection does not contain value for 報錯問題解決收錄 1.報錯收錄 后端測試時偶然遇到的用mybatis生成好的mapper文件&#xff0c;報Result Maps collection does not contain value…的錯誤 2.報錯分析 java.lang.ILledalAraumentEx…

必應bing國內廣告開戶首充和開戶費是多少?

微軟必應Bing作為國內領先的搜索引擎之一&#xff0c;其廣告平臺憑借其精準的投放、高效的數據分析和廣泛的用戶覆蓋&#xff0c;已成為眾多企業的首選。 根據最新政策&#xff0c;2024年必應Bing國內廣告開戶預充值金額設定為1萬元人民幣起。這一調整旨在確保廣告主在賬戶初始…