從零開始的SpringBoot前後端分離入門級專案(七)
一個很正經的目錄!
分頁引數PageParamDTO
在我們進行分頁查詢的時候,我們經常需要對其中的某些欄位進行某種排序(升序,降序)。那麼前端每次都需要傳送不同的引數,甚至不同個數的引數,這就對後端如何接受引數有所要求,有時候可能直接將排序規則拼接在字串中如下
@PathVariable("/findAll/{id}/{DESC}")
那麼這就是對id的降序排序,但是我們需要思考一個問題,分頁和排序一般需要幾個引數
- 當前頁數是哪一頁
- 每頁展示幾條資料
- 待排序的欄位
- 排序的方式
如果都是用請求地址拼接或者請求引數的方式未免有些許繁瑣,我們不如將其進行抽象,通過一個DTO,在需要進行分頁或分頁並排序的操作時由前端傳送給後臺,請在model.dto下新建PageParamDTO,內容如下
/**
* @Author Alfalfa99
* @Date 2020/9/18 13:33
* @Version 1.0
* 分頁查詢DTO
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageParamDTO {
/**
* cp: 當前頁數
* ps: 每一頁的資料條數
* order: 需要排序的欄位-排序的方式(asc:升序,desc:降序)
*/
@NotNull(message = "當前頁數不能為空")
private Integer cp;
@NotNull(message = "每頁條數不能為空")
private Integer ps;
private Map<String,String> order;
}
當然我們拿到了裝載著待排序欄位和排序規則的map之後還需要進行一系列的判斷並拼接成字串,最後放到PageHelper中使用。
編寫PageParamCheckUtil
/**
* @Author Alfalfa99
* @Date 2020/9/17 20:23
* @Version 1.0
* 檢查分頁引數
*/
@Component
public class PageParamCheckUtil {
public String CheckOrder(Map<String, String> map) {
StringBuilder finalOrder = new StringBuilder();
//判斷map是否為空
if (map != null && !map.isEmpty()) {
//讀取map中的所有待排序欄位及其排序方法
for (String s : map.keySet()) {
//把待排序欄位加入finalOrder
finalOrder.append(s);
String order = map.getOrDefault(s, "asc").toLowerCase();
if ("desc".equals(order)) {
finalOrder.append(" " + order + ",");
} else {
finalOrder.append(" asc,");
}
}
finalOrder.deleteCharAt(finalOrder.length() - 1);
}
return finalOrder.toString();
}
}
這裡要注意,如果map為空請不要把空格拼接進去,不然Mybatis在執行時會報錯。
那麼我就是用一個例項來進行測試吧(這裡就不仔細闡述在哪裡新增程式碼了,大家懂的都懂)
//UserDao
/**
* 查詢所有使用者
*
* @return
*/
@Select("SELECT * FROM tb_user")
List<User> findAllUser();
//UserService
private final PageParamCheckUtil ppC; //需要先注入該工具類
/**
* 查詢所有使用者
*
* @return 返回使用者列表
*/
public PageResult<User> findAllUser(PageParamDTO ppDTO) {
Page<Object> page = PageHelper.startPage(ppDTO.getCp(), ppDTO.getPs(), ppC.CheckOrder(ppDTO.getOrder()));
List<User> allUser = adminDao.findAllUser();
return new PageResult<>(page.getPages(), page.getTotal(), allUser);
}
在進行查詢之前使用PageHelper.startPage(當前頁數,每頁條數,排序規則)方法,即可幫我們自動排序並分頁,page.getPages() 用來返回該分頁引數下一共會有多少頁, page.getTotal()用來獲得總的資料條數。我們使用前文說過的分頁結果類進行包裝 ,返回到Controller層進行處理。
@PostMapping("/findAllUser")
public CommonResult<PageResult<User>> findAllUser(@Valid @RequestBody PageParamDTO ppDTO) {
PageResult<User> allUser = adminService.findAllUser(ppDTO);
return new CommonResult<>(20000, "OK", allUser);
}
首先我們先往User表中插入數條資料(為了便於檢視效果,我們在這裡就不使用Postman進行新增使用者操作,而是直接通過SQLYog向表中插入資料):
然後啟動專案(先在攔截器配置類中放行相關介面)使用 postman進行如下測試:
可以看到我們成功的把四條記錄都已經查詢出來,在這裡各位讀者也可以自行修改cp,ps的引數來體驗一下不同的分頁規則,我們更主要的是要測試一下能否正常排序:
通過id降序
通過id升序
通過id降序,如果id相同則通過nickname升序
大家可以在資料庫中多插入一些資料 ,然後自己嘗試一下相關的操作,通過PageParamDTO和PageParamCheckUtil我們不管前端傳入幾個待排序的欄位都可以進行便捷的排序啦!
其他的需求點都大同小異(CRUD),不再單獨編寫相關文章啦(其實就是我懶 )。
後記
本系列的文章到這裡已經臨近尾聲。由於水平有限時間匆忙,文章中難免出現紕漏與錯誤,專案構思時也有不足之處,希望看到這裡的你能夠對這個專案有自己的想法,同時也請各位讀者指出文章中的不足之處,筆者將一一改正!祝各位看到這裡的讀者今後寫碼之路一帆風順,永無BUG!我們下個系列再見~
後端的程式碼後續會整理髮布在我的GitHub中,如果有需要的讀者可以前往自取(求star求點贊! )
點這裡前往我的GitHub
本次部落格的內容也到此為止了,如果對部落格內容有疑問可以私信聯絡筆者,如果這篇文章對你有用希望你能點一個贊,謝謝~
相關文章
- 從零開始搭建前後端分離論壇 一後端
- 前後端分離Ajax入門後端
- 零基礎搭建前後端分離專案後端
- 如何利用前後端分離開發模式,開始一個專案?後端模式
- Laravel + Vue.js 前後端分離之新手入門級的開源專案(最終篇)LaravelVue.js後端
- 《從零構建前後分離web專案》探究 - 深入聊聊前後分離架構Web架構
- 前後端分離之Ajax入門後端
- springboot+vue前後端分離專案-vue專案搭建Spring BootVue後端
- 《從零構建前後分離 WEB 專案》 序 – 開源的意義Web
- 《從零構建前後分離 WEB 專案》 序 - 開源的意義Web
- Django+Vue.js搭建前後端分離專案 web前後端分離專案實踐DjangoVue.js後端Web
- Vue,Springboot前後端分離專案初體驗VueSpring Boot後端
- Flask前後端分離專案案例Flask後端
- springboot+vue前後端分離專案-vue專案搭建2Spring BootVue後端
- springboot+vue前後端分離專案-vue專案搭建3Spring BootVue後端
- springboot+vue前後端分離專案-vue專案搭建4Spring BootVue後端
- springboot+vue前後端分離專案-vue專案搭建5Spring BootVue後端
- springboot+vue前後端分離專案-專案搭建15-匯入匯出Spring BootVue後端
- 手把手教你從零開始搭建SpringBoot後端專案框架Spring Boot後端框架
- SpringBoot+vue 前後端的分離專案筆記 [一] 專案搭建Spring BootVue後端筆記
- SpringBoot + Angular前後端分離專案部署(更新)實錄Spring BootAngular後端
- jQuery 前後端分離專案總結jQuery後端
- 前後端分離專案實踐分析後端
- 從MVC到前後端分離MVC後端
- Nginx 同域名部署前後端分離專案Nginx後端
- Nginx代理同域名前後端分離專案Nginx後端
- 前後端分離探索——MVC 專案升級的一個過渡方案後端MVC
- SpringBoot,Vue前後端分離開發首秀Spring BootVue後端
- 從部署上做到前後端分離後端
- 前後端分離後模組開發後端
- docker+nginx+redis部署前後端分離專案!!!DockerNginxRedis後端
- 《從零構建前後分離web專案》:開篇 - 縱觀WEB歷史演變Web
- springboot+vue前後端分離專案-專案搭建13-支付寶付款Spring BootVue後端
- 從零開始串聯Python前後端技術Python後端
- SpringBoot+vue 前後端的分離專案筆記 [二] 使用者登入驗證Spring BootVue後端筆記
- Django + Taro 前後端分離專案實現企業微信登入Django後端
- 通用的前後端分離專案技術與框架方案後端框架
- docker-compose + nginx部署前後端分離的專案DockerNginx後端