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