MyBatis-Plus 實現(xiàn)動態(tài)字段排序 今日熱議
2023-06-23 10:04:16 來源:博客園
(資料圖片僅供參考)
場景
雖然前端能根據(jù)返回的數(shù)組進行對字段的排序,但也僅局限于實現(xiàn)當前頁的排序,無法滿足全部數(shù)據(jù)的排序,所以需要走接口的查詢進行排序,獲取最全的排序數(shù)據(jù)。
思路
- 前端需傳遞排序的字段,該字段是正序還是倒敘。可能存在多個,所以字段為字符串數(shù)組,可以通過逗號分開。
- 后端拿到參數(shù)后,如果字段名是駝峰命名,需要轉為小寫字母+下劃線命名。
- 將處理后的字段進行排序sql上的拼接處理后,拼接到 order by 語句后面,得到order by語句。
- 根據(jù)MyBatis-Plus的
last
方法,將處理的order by語句進行拼接到查詢sql語句后面。
實現(xiàn)
- 前端傳遞的參數(shù)格式為:
{ "sort": "userName,updateTime", "order": "asc,desc"}
- 后端接收排序對象
Sorter
,那個請求查詢用到自定義排序就繼承該類:
import io.swagger.annotations.ApiModelProperty;import lombok.Data;/** 1. 基礎排序對象,包含排序字段和排序方式 */@Datapublic class Sorter{ @ApiModelProperty(value = "排序字段",example = "userName") private String sort; @ApiModelProperty(value = "排序方式",example = "asc/desc") private String order; /** * 根據(jù)查詢條件拼接得到order by語句 * @param sorter 分頁查詢條件 * @return String */ public static String getStatement(Sorter sorter) { String sort; String[] sortArray = {}; String[] orderArray = {}; String order = sorter.getOrder(); String sortColumn = sorter.getSort(); StringBuilder statement = new StringBuilder(); // 多字段排序 if (StringUtils.isNotEmpty(sortColumn)) { // 駝峰命名轉為下劃線 sort = StringUtils.toUnderScoreCase(sortColumn); if (sort.contains(",")) { sortArray = sort.split(","); } } else { return ""; } if (StringUtils.isNotEmpty(order)) { if (order.contains(",")) { orderArray = order.split(","); } } else { return ""; } if (sortArray.length > 0 && orderArray.length > 0) { int length = sortArray.length; for (int i = 0; i < length; i++) { statement.append(sortArray[i]); statement.append(" "); statement.append(orderArray[i]); if (i < length - 1 ) { statement.append(", "); } } } else { // " #{sort} #{order}“ statement.append(sort); statement.append(" "); statement.append(order); } return statement.toString(); } /** * 根據(jù)查詢條件拼接得到order by語句 * @param sorter 分頁查詢條件 * @return String */ public static String getOrderByStatement(Sorter sorter) { String statement = getStatement(sorter); if (StringUtils.isNotEmpty(statement)) { return " order by " + statement; } else { return statement; } }}
- 處理字段駝峰式的工具類:
/** 3. 字符串工具類 4. 5. @author lcl */public class StringUtils extends org.apache.commons.lang3.StringUtils{ /** 下劃線 */ private static final char SEPARATOR = "_"; /** * * 判斷一個字符串是否為非空串 * * @param str String * @return true:非空串 false:空串 */ public static boolean isNotEmpty(String str) { return !isEmpty(str); } /** * 駝峰轉下劃線命名 */ public static String toUnderScoreCase(String str) { if (str == null) { return null; } StringBuilder sb = new StringBuilder(); // 前置字符是否大寫 boolean preCharIsUpperCase = true; // 當前字符是否大寫 boolean curreCharIsUpperCase = true; // 下一字符是否大寫 boolean nexteCharIsUpperCase = true; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (i > 0) { preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); } else { preCharIsUpperCase = false; } curreCharIsUpperCase = Character.isUpperCase(c); if (i < (str.length() - 1)) { nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); } if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) { sb.append(SEPARATOR); } else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) { sb.append(SEPARATOR); } sb.append(Character.toLowerCase(c)); } return sb.toString(); }}
- 請求查詢的入?yún)ο罄^承
Sorter
排序對象:
- Mapper層直接調用
last
在sql尾拼接語句方法,將Sorter
的getOrderByStatement(Sorter sorter)
方法傳入:
結果
關鍵詞:
相關閱讀
-
MyBatis-Plus 實現(xiàn)動態(tài)字段排序 今日熱議
場景 雖然前端能根據(jù)返回的數(shù)組進行對字段的排序,但也僅局限于實現(xiàn) -
環(huán)球熱訊:天璣曲面屏之王!vivo X90s上...
6月22日消息,vivo京東自營店顯示,vivoX90s已上架接受預約,新品提供 -
世界今亮點!內蒙古自治區(qū)達拉特旗發(fā)布...
達拉特旗氣象臺2023年06月21日16時06分發(fā)布高溫黃色預警信號:預計達拉 -
環(huán)球看熱訊:烏蘭布和沙漠的綠色傳奇—...
風從這里吹過,卷起黃沙,曾留下沙害和貧窮,也記錄了波瀾壯闊的治沙傳 -
世界今日訊!俄羅斯稱美國正擴充駐敘利...
敘利亞政府指責美國駐軍侵犯敘主權、頻繁盜采敘石油并搶奪糧食 -
三維激光掃描儀說明書(三維激光掃描儀...
來為大家解答以上問題,三維激光掃描儀說明書,三維激光掃描儀原理很多 -
看點:亞少賽u17小組墊底出局,中國足球...
2023年亞少賽(U17亞洲杯)在泰國春武里舉行,中國男足名宿楊晨作為主 -
【環(huán)球速看料】真正見過世面的女人,往...
可一個真正見過世面的女人呢,在巔峰的時候從來不會焦躁,她知道為以后 -
意外加息50基點!英國央行會比美聯(lián)儲走...
市場預計,英國央行基準利率將在年底左右達到6%的峰值,若如此將創(chuàng)下20 -
資訊推薦:協(xié)會動態(tài) | 6月19日,我會領...
點擊藍字關注我們6月19日,“鏈接世界預鑒未來”——全球溯源中心系... -
今日最新!白開水里加枳實,只需1杯,胃...
胃脹痛大家應該都經(jīng)歷過,一股氣頂?shù)奈?、腸子,竄到哪哪疼,撐的肚皮像 -
天天熱門:今年冬天流行“老錢風”穿搭,...
當我們看膩了極簡風、名人風的時候,當我們再看老款風的時候,就會有一 -
屯溪區(qū):多措并舉 筑牢校園防溺水安全...
(通訊員方曉堅)仲夏將至,氣溫逐漸升高,溺水事故進入易發(fā)、多發(fā)期。為 -
任天堂透露更多有關神奇寶貝猩紅和紫羅...
在6月的NintendoDirect直播期間,神奇寶貝公司為我們提供了即將推出的 -
iOS 17 九大更新匯總,附升級教程!
各位果粉們早上好,今天凌晨,蘋果WWDC開發(fā)者大會如期召開,相信不少果 -
全國“村BA”揭幕戰(zhàn)即將打響!記者實探球場
6月20日,全國和美鄉(xiāng)村籃球大賽(“村BA”)揭幕式將在貴州省黔東南州... -
北京房山打造四大產(chǎn)業(yè)集群 吸引優(yōu)質企...
中新網(wǎng)北京6月21日電 (記者 徐婧)北京市房山區(qū)全力打造新型儲能及 -
京信通信(02342)6月21日斥資約107.56萬...
京信通信(02342)發(fā)布公告,于2023年6月21日斥資約107 56萬港元回購 -
近八成的世界500強企業(yè)在江蘇有投資_當...
江蘇省商務廳20日在南京舉行產(chǎn)業(yè)鏈供應鏈國際合作交流會暨企業(yè)家太湖論 -
蔚來手機通過工信部無線電核準:配備UWB...
據(jù)報道,蔚來手機已于2023年6月19日通過了工信部無線電核準。據(jù)工信部