最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

DoytoQuery中的分頁排序方案示例詳解

 更新時間:2022年12月27日 17:12:32   作者:f0rb  
這篇文章主要為大家介紹了DoytoQuery中的分頁排序方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

分頁和排序是數(shù)據(jù)庫提供的兩項基本的查詢功能。

以MySQL為例,一條典型的SQL查詢語句如下:

SELECT * FROM t_user
ORDER BY create_time DESC, username ASC
LIMIT 10 OFFSET 20

那么在前后端交互中,前端應(yīng)該如何向后端傳遞分頁和排序有關(guān)的信息呢?需要傳遞哪些參數(shù)?參數(shù)的意義和格式又是什么?

分頁

分頁的語句為LIMIT 10 OFFSET 20,其中10為每頁的大小,20為查詢的偏移量,也就是查詢表中的第21到30條共計10條數(shù)據(jù)。

但是在設(shè)計接口時,通常不會要求前端直接傳入OFFSET參數(shù),而是通過傳入頁號和分頁大小,來計算出OFFSET的值。

在這個例子中,假設(shè)前端的頁號從1開始,那么需要查詢的數(shù)據(jù)就是分頁大小為10的第3頁數(shù)據(jù),對應(yīng)的OFFSET的值的計算式為(3-1)*10 = 20。

前端在調(diào)用后端查詢接口時,通常會傳入頁號和每頁大小,由后端計算出OFFSET用于分頁查詢。這里頁號的參數(shù)名稱定義為pageNumber,分頁大小的參數(shù)名定義為pageSize, 則以起始頁號為1為例,OFFSET的計算公式為:

(pageNumber - 1) * pageSize

而前端的傳值應(yīng)為

?pageNumber=3&pageSize=10

分頁接口

不同的數(shù)據(jù)庫的分頁語句并不一致,但是一般都需要三個參數(shù):SQL語句,分頁大小,偏移量,所以定義一個構(gòu)建分頁語句的接口Dialect,根據(jù)訪問的數(shù)據(jù)庫提供對應(yīng)的分頁實現(xiàn)。

public interface Dialect {
    String buildPageSql(String sql, int limit, long offset);
}

排序

排序的語句為ORDER BY create_time DESC, username ASC, 其中ORDER BY為SQL的關(guān)鍵字,可以將其定義為參數(shù)名。因為是用于排序,所以我將其取名為sort,對應(yīng)的值為create_time DESC, username ASC。因為前端GET請求需要對參數(shù)值里的空格進(jìn)行轉(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;
}

每條查詢都有進(jìn)行顯示或隱式的分頁和排序,比如:

SELECT * FROM t_user

SELECT * FROM t_user
ORDER BY id ASC
LIMIT ∞ OFFSET 0

等價。

所以PageQuery應(yīng)當(dāng)作為所有查詢對象的父類,以便為數(shù)據(jù)查詢提供分頁和排序的能力。

響應(yīng)對象

對于前端的分頁查詢請求,除了返回對應(yīng)的數(shù)據(jù)列表外,還需要返回總的數(shù)據(jù)條數(shù)total以幫助前端計算總頁數(shù),計算公式為⌈total/size⌉。對應(yīng)的響應(yīng)對象定義如下:

public class PageList<T> {
    private final List<T> list;
    private final long total;
}

小結(jié)

本篇主要介紹了DoytoQuery中對于數(shù)據(jù)庫查詢中分頁和排序功能的一種面向?qū)ο蟮慕鉀Q方案,就這。更多關(guān)于DoytoQuery分頁排序的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java 垃圾回收機制詳解及實例代碼

    Java 垃圾回收機制詳解及實例代碼

    這篇文章主要介紹了 Java 垃圾回收機制詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Spring mvc Controller和RestFul原理解析

    Spring mvc Controller和RestFul原理解析

    這篇文章主要介紹了Spring mvc Controller和RestFul原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • spring簡單MVC實現(xiàn)方法(URL映射及其參數(shù)使用、查詢(id、其他參數(shù))、增加)

    spring簡單MVC實現(xiàn)方法(URL映射及其參數(shù)使用、查詢(id、其他參數(shù))、增加)

    這篇文章主要介紹了spring簡單MVC實現(xiàn)方法(URL映射及其參數(shù)使用、查詢(id、其他參數(shù))、增加),方法參數(shù)使用包括在無注解下獲取參數(shù),使用@RequestParam 獲取參數(shù)的方法,每種方法講解的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Java實現(xiàn)pdf轉(zhuǎn)圖片案例

    Java實現(xiàn)pdf轉(zhuǎn)圖片案例

    這篇文章主要介紹了Java實現(xiàn)pdf轉(zhuǎn)圖片案例,按照步驟放置代碼,一步步完成該案例,將代碼部署便可,需要的朋友可以參考下
    2021-06-06
  • springboot+vue3無感知刷新token實戰(zhàn)教程

    springboot+vue3無感知刷新token實戰(zhàn)教程

    本文介紹了基于Spring Boot和Vue3的無感知刷新Token的實現(xiàn),包括后端token構(gòu)造和刷新邏輯,以及前端的請求處理和緩存機制
    2025-03-03
  • Java虛擬機處理異常的最佳方式

    Java虛擬機處理異常的最佳方式

    這篇文章主要給大家介紹了關(guān)于Java虛擬機處理異常的最佳方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • SpringBoot的ConfigurationProperties或Value注解無效問題及解決

    SpringBoot的ConfigurationProperties或Value注解無效問題及解決

    在SpringBoot項目開發(fā)中,全局靜態(tài)配置類讀取application.yml或application.properties文件時,可能會遇到配置值始終為null的問題,這通常是因為在創(chuàng)建靜態(tài)屬性后,IDE自動生成的Get/Set方法包含了static關(guān)鍵字
    2024-11-11
  • java日常練習(xí)題,每天進(jìn)步一點點(1)

    java日常練習(xí)題,每天進(jìn)步一點點(1)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • springBoot集成Elasticsearch 報錯 Health check failed的解決

    springBoot集成Elasticsearch 報錯 Health check failed的解決

    這篇文章主要介紹了springBoot集成Elasticsearch 報錯 Health check failed的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring Boot 的創(chuàng)建和運行示例代碼詳解

    Spring Boot 的創(chuàng)建和運行示例代碼詳解

    Spring Boot 的誕生是為了簡化Spring程序的開發(fā),今天給大家介紹下Spring Boot 的創(chuàng)建和運行,主要包括Spring Boot基本概念和springboot優(yōu)點,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-07-07

最新評論

察雅县| 蒲城县| 七台河市| 灵川县| 新民市| 阿拉善右旗| 金川县| 和静县| 旬阳县| 黄龙县| 郧西县| 乌兰察布市| 温泉县| 海南省| 垣曲县| 洞头县| 肥西县| 门源| 道孚县| 会宁县| 同仁县| 横峰县| 盖州市| 新密市| 长海县| 雅江县| 同仁县| 宜阳县| 佛坪县| 成安县| 鄂尔多斯市| 阳城县| 霞浦县| 沂源县| 通江县| 新平| 固镇县| 博白县| 峨眉山市| 黄骅市| 瑞安市|