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

Java Web中常用的分頁組件(Java端實現(xiàn))

 更新時間:2017年05月22日 09:12:53   作者:天空中的一縷微風  
本文通過使用場景分析給大家介紹了Java Web中常用的分頁組件(Java端實現(xiàn)),非常不錯,具有參考借鑒價值,需要的朋友參考下吧

 前言

好久沒寫Web程序了,這一段時間看了看原來師弟們做的一些程序,感覺還是有很多不足,一個比較典型的例子就是分頁查詢的實現(xiàn),正好借著這個機會簡單記錄一下。

分析

使用場景

“分頁”在Web程序里非常常見,比如我們在頁面上經(jīng)常要展示一些列表信息,通常情況下,如果數(shù)據(jù)過多,我們在一屏上難以羅列出所有的記錄,而且很多時候我們可能只是看看比較Top的一些記錄,因此,在這種情況下使用“分頁”查詢只展示部分數(shù)據(jù)是比較合適的。

實現(xiàn)原理

從數(shù)據(jù)庫角度上來說,分頁查詢實現(xiàn)的難度并不是很大,當然不同的數(shù)據(jù)庫實現(xiàn)是有一些差異的。以MySQL為例,我們通常會寫出如下的SQL語句:

# 簡單的單表查詢
select [fields] from [table_name] where [expression] order by [field] [asc|desc] limit [offset], [size]

其中有幾處地方我們比較關(guān)注,第一個就是order by后的字段field和排順規(guī)則,第二個就是limit之后的數(shù)據(jù)偏移量offset和大小size。

所以,以上幾個參數(shù)是我們實現(xiàn)分頁查詢一個關(guān)鍵。

實現(xiàn)

這里的實現(xiàn)主要是指Java后臺的實現(xiàn),關(guān)于如何編寫一個前端分頁插件不在此文的討論之列。我們來簡單梳理一下整個業(yè)務邏輯的交互過程,就是”前端查詢參數(shù)”->”后臺業(yè)務邏輯查詢”->”返回結(jié)果集到前端”。

那么問題來了,前端一般要傳遞哪些參數(shù)到服務器后臺呢?

回到上面的實現(xiàn)原理上,我們發(fā)現(xiàn),這4個參數(shù)我們都是需要的,而且它們不是固定的。從開發(fā)角度上來講,我們首先需要的參數(shù)是sortField,sortOrder,即排一定的計算序字段和排序方式,offset我們通常會根據(jù)一定的計算規(guī)則進行計算,一般在頁面上我們使用的是pageCurrent,即用戶需要查詢的頁數(shù),另外頁面還必須傳遞一個參數(shù)即pageSize,即每頁要顯示的數(shù)據(jù)總量,這樣,我們就可以根據(jù)pageCurrent和pageSize來計算出offset和size,計算公式如下所示:

offset=(pageCurrent−1)∗pageSize
size=pageSize

OK,我們梳理出來了4個字段,即sortField,sorOrder,pageCurrent和pageSize。這些參數(shù)是前臺應該傳遞給后臺服務的,當然,從程序的健壯性來說,如果用戶不傳遞這些字段,我們也應該有一些默認的實現(xiàn),比如說如果不傳遞當前頁數(shù),我們默認就是第一頁,如果不傳遞pageSize,我們可以默認其大小為每頁30條……那么,第一個Java Bean就出來了,我們稱為PageParam類。

 public class PageParam {
  private static final Integer DEFAULT_PAGE_CURRENT = 1;
  private static final Integer DEFAULT_PAGE_SIZE = 30;
  /**
   * 排序字段
   */
  private String sortField;
  /**
   * 排序方式
   * asc | desc
   */
  private String sortOrder;
  /**
   * 查詢的當前頁
   */
  private Integer pageCurrent = DEFAULT_PAGE_CURRENT;
  /**
   * 查詢的數(shù)據(jù)條目
   */
  private Integer pageSize = DEFAULT_PAGE_SIZE;
  ......
}

現(xiàn)在,我們先忽略服務器端的具體處理流程,來思考一下服務器端需要返回哪些信息到前端頁面上進行展示。
下面是我從網(wǎng)上截取的一個典型分頁界面(如不能引用請私信我):

這里寫圖片描述 

通過分析,可以看到,當前頁pageCurrent是需要的,且通常會特殊展示。另外如果頁數(shù)過多,在前端界面里通常只會展示部分頁值,那么我們也需要來進行判斷,通常情況下我們通過判斷總頁數(shù)即可,那么總頁數(shù)totalPage是需要的。當然,還有一些隱含的參數(shù)我們通常也是要傳遞給前端進行相關(guān)的業(yè)務處理的,比如說數(shù)據(jù)的總條目totalSize和一頁顯示的數(shù)量pageSize,這些通常都會在頁面進行展示。第二個Java Bean我們成為PageResult類:

public class PageResult<T> {
  /**
   * 返回的數(shù)據(jù)結(jié)果集
   */
  private List<T> resultList;
  /**
   * 總數(shù)據(jù)條目
   */
  private Integer totalSize;
  /**
   * 總頁數(shù)
   */
  private Integer totalPage;
  /**
   * 當前頁
   */
  private Integer pageCurrent;
  /**
   * 顯示的數(shù)據(jù)條目
   */
  private Integer pageSize;
  ......
}

這里totalPage其實是可以根據(jù)pageSize和totalSize進行計算出來的,計算公式如下:

totalPage=totalSize%pageSize==0?totalSize/pageSize:(totalSize/pageSize+1)

在實現(xiàn)里,我們對結(jié)果集使用了泛型,主要是為了通用處理。還差最后一點,就是服務器端的處理邏輯,這里不太好說的原因在于現(xiàn)在服務器端的框架太多,如MyBatis,spring JDBC,hibernate等等。不同的框架使用上是有較大差別的,不過有一些比較通用的做法這里簡單記錄一下。

對任何前端傳遞過來的參數(shù)都必須進行校驗。這里主要是pageCurrent和pageSize,因為用戶很可能傳遞過來一些無效值,比如負值-1以及一些不合適值如pageSize取100000000等。

排序字段不是必須的。要根據(jù)業(yè)務來處理,因為很多時候通過id或者其它字段默認實現(xiàn)就可以了,不需要進行重新排序。
pageSize的值要合適。如果太小會造成頁面過于空洞,頁數(shù)過多;而取值過大則會使頁面內(nèi)容繁雜,通常在一屏比較合適,不需要用戶拉動滑動條。

以上所述是小編給大家介紹的Java Web中常用的分頁組件(Java端實現(xiàn)),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 基于Java編寫一個通用返回工具類Result

    基于Java編寫一個通用返回工具類Result

    Java項目搭建時,常常需要去封裝一個通用型的Result工具類,下面小編就和大家分享一個已經(jīng)封裝好的常用的返回類,希望對大家有所幫助
    2023-07-07
  • Java基于Swing實現(xiàn)的打獵射擊游戲代碼

    Java基于Swing實現(xiàn)的打獵射擊游戲代碼

    這篇文章主要介紹了Java基于Swing實現(xiàn)的打獵射擊游戲代碼,包含完整的游戲事件處理與邏輯流程控制,具有不錯的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • swagger?@ApiModel添加實體類不生效的解決

    swagger?@ApiModel添加實體類不生效的解決

    這篇文章主要介紹了swagger?@ApiModel添加實體類不生效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • druid連接泄露故障全面分析

    druid連接泄露故障全面分析

    這篇文章主要介紹了druid連接泄露故障全面分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • JSON Web Token在登陸中的使用過程

    JSON Web Token在登陸中的使用過程

    這篇文章主要介紹了JSON Web Token在登陸中的使用過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • springboot自定義Starter過程解析

    springboot自定義Starter過程解析

    這篇文章主要介紹了springboot自定義Starter過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 解析spring boot與ireport 整合問題

    解析spring boot與ireport 整合問題

    本文通過實例代碼給大家介紹了spring boot 與 ireport 整合問題,關(guān)于pom文件依賴的問題通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-10-10
  • Java由淺入深講解繼承下

    Java由淺入深講解繼承下

    繼承就是可以直接使用前輩的屬性和方法。自然界如果沒有繼承,那一切都是處于混沌狀態(tài)。多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。多態(tài)就是同一個接口,使用不同的實例而執(zhí)行不同操作
    2022-04-04
  • Java多線程中的ThreadLocal應用場景及問題解讀

    Java多線程中的ThreadLocal應用場景及問題解讀

    這篇文章主要介紹了Java多線程中的ThreadLocal應用場景及問題解讀,ThreadLocal這個類在多線程并發(fā)中主要的使用場景是什么呢,我們都知道多線程并發(fā)問題實際就是多個線程對公共資源訪問和修改問題,需要的朋友可以參考下
    2023-12-12
  • Flink狀態(tài)和容錯源碼解析

    Flink狀態(tài)和容錯源碼解析

    這篇文章主要為大家介紹了Flink狀態(tài)和容錯源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12

最新評論

商丘市| 湛江市| 三台县| 桂阳县| 合阳县| 县级市| 墨江| 云龙县| 吉水县| 宝应县| 香河县| 黔江区| 霸州市| 钟山县| 迁西县| 罗田县| 嘉义市| 竹山县| 武川县| 蒙阴县| 安西县| 塔河县| 刚察县| 清徐县| 三明市| 信阳市| 陵水| 丰镇市| 胶南市| 都兰县| 吴忠市| 塘沽区| 钟山县| 鄂温| 德江县| 调兵山市| 东方市| 冕宁县| 威远县| 福贡县| 城口县|