DoytoQuery中的分頁排序方案示例詳解
引言
分頁和排序是數(shù)據(jù)庫提供的兩項基本的查詢功能。
以MySQL為例,一條典型的SQL查詢語句如下:
SELECT * FROM t_user ORDER BY create_time DESC, username ASC LIMIT 10 OFFSET 20
那么在前后端交互中,前端應該如何向后端傳遞分頁和排序有關的信息呢?需要傳遞哪些參數(shù)?參數(shù)的意義和格式又是什么?
分頁
分頁的語句為LIMIT 10 OFFSET 20,其中10為每頁的大小,20為查詢的偏移量,也就是查詢表中的第21到30條共計10條數(shù)據(jù)。
但是在設計接口時,通常不會要求前端直接傳入OFFSET參數(shù),而是通過傳入頁號和分頁大小,來計算出OFFSET的值。
在這個例子中,假設前端的頁號從1開始,那么需要查詢的數(shù)據(jù)就是分頁大小為10的第3頁數(shù)據(jù),對應的OFFSET的值的計算式為(3-1)*10 = 20。
前端在調(diào)用后端查詢接口時,通常會傳入頁號和每頁大小,由后端計算出OFFSET用于分頁查詢。這里頁號的參數(shù)名稱定義為pageNumber,分頁大小的參數(shù)名定義為pageSize, 則以起始頁號為1為例,OFFSET的計算公式為:
(pageNumber - 1) * pageSize
而前端的傳值應為
?pageNumber=3&pageSize=10
分頁接口
不同的數(shù)據(jù)庫的分頁語句并不一致,但是一般都需要三個參數(shù):SQL語句,分頁大小,偏移量,所以定義一個構建分頁語句的接口Dialect,根據(jù)訪問的數(shù)據(jù)庫提供對應的分頁實現(xiàn)。
public interface Dialect {
String buildPageSql(String sql, int limit, long offset);
}
排序
排序的語句為ORDER BY create_time DESC, username ASC, 其中ORDER BY為SQL的關鍵字,可以將其定義為參數(shù)名。因為是用于排序,所以我將其取名為sort,對應的值為create_time DESC, username ASC。因為前端GET請求需要對參數(shù)值里的空格進行轉(zhuǎn)義,為避免這個問題,將值里的,轉(zhuǎn)為;,將DESC/ASC前的空格轉(zhuǎn)為,,最終前端傳值如下:
?sort=create_time,desc;username,asc
請求對象
綜合以上分頁和排序的參數(shù)定義和說明,前端的傳值如下:
?pageNumber=3&pageSize=10&sort=create_time,desc;username,asc
那么后端就可以定義如下PageQuery類用于分頁和排序參數(shù)的處理:
public class PageQuery {
private Integer pageNumber;
private Integer pageSize;
private String sort;
}
每條查詢都有進行顯示或隱式的分頁和排序,比如:
SELECT * FROM t_user
和
SELECT * FROM t_user ORDER BY id ASC LIMIT ∞ OFFSET 0
等價。
所以PageQuery應當作為所有查詢對象的父類,以便為數(shù)據(jù)查詢提供分頁和排序的能力。
響應對象
對于前端的分頁查詢請求,除了返回對應的數(shù)據(jù)列表外,還需要返回總的數(shù)據(jù)條數(shù)total以幫助前端計算總頁數(shù),計算公式為⌈total/size⌉。對應的響應對象定義如下:
public class PageList<T> {
private final List<T> list;
private final long total;
}
小結
本篇主要介紹了DoytoQuery中對于數(shù)據(jù)庫查詢中分頁和排序功能的一種面向?qū)ο蟮慕鉀Q方案,就這。更多關于DoytoQuery分頁排序的資料請關注腳本之家其它相關文章!
相關文章
Mybatis?sqlMapConfig.xml中的mappers標簽使用
這篇文章主要介紹了Mybatis?sqlMapConfig.xml中的mappers標簽使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。2022-01-01
Java數(shù)據(jù)庫操作庫DButils類的使用方法與實例詳解
這篇文章主要介紹了JDBC數(shù)據(jù)庫操作庫DButils類的使用方法詳解,需要的朋友可以參考下2020-02-02
IDEA創(chuàng)建maven項目時在tomcat運行瀏覽器404的問題
這篇文章主要介紹了IDEA創(chuàng)建maven項目時在tomcat運行瀏覽器404的問題及解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11

