国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - Springmvc應用Mongodb分頁實現

Springmvc應用Mongodb分頁實現

2021-02-18 12:34chunqiuwei JAVA教程

這篇文章主要為大家詳細介紹了Springmvc應用Mongodb分頁實現,具有一定的參考價值,感興趣的小伙伴們可以參考一下

對于web應用來說分頁顯示數據是是最基本的功能,作為經常開發web應用的程序員來說這個功能也小菜一碟,但是對于初學者來說卻是是個常見的問題,以前自學web開發的時候對這個問題也是各種google,整了半天才實現。
  現在手中的項目正好也需要一個分頁的功能,這個項目用了spring mvc數據庫用到了mongodb,自己就寫了一個分頁的標簽供整個項目來使用,今天周六加完班閑著沒事就把分頁的實現寫出來以便大家參考,不當之處歡迎批評指正。

1)分頁:

一般都是把一次查詢分幾次查詢來顯示。用戶每次點擊頁數(或者上一頁下一頁)的時候實際上一次查詢請求。查詢設定數據的條數返回并顯示。

2)mongodb分頁用到的工具

     在查詢的時候需要用到Query來保存用戶的查詢條件,該類有兩個方法是實現分頁功能的核心一個是skip(int),一個是limit(int)方法,其中limit用來限制每次查詢的條數,也是每顯示的條數。而skip是跳過當前頁之前的所有頁面的數據條數開始查詢

3)分頁關鍵點(所需的數據):

i) 每頁顯示的條數pageSize
ii)當前的頁數currentPage,而前面的skip方法傳入的參數就是根據currentPage和pageSize來決定的,skip = (currentPage-1)*pageSize

4)分頁的具體實現

通過上面的分析,分頁簡單來說就是用戶點擊分頁的時候提交一個關鍵數據(currentPage)到后臺,后臺根據currentPage來進行分頁查詢;至于上面的pageSize,
在后臺設置一個變量來控制即可。

下面是項目中的用來查詢的基類:MongodbBaseDao<T>的部分代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//每頁顯示五條
  protected static final int PAGE_SIZE = 8;
  /**
   * 通過條件查詢,查詢分頁結果
   */
  public Pagination<T> getPage(int currentPage, Query query) {
    //獲取總條數
    long totalCount = this.mongoTemplate.count(query, this.getEntityClass());
    //總頁數
    int totalPage = (int) (totalCount/PAGE_SIZE);
     
    int skip = (currentPage-1)*PAGE_SIZE;
     
    Pagination<T> page = new Pagination<T>(currentPage, totalPage, (int)totalCount);
    query.skip(skip);// skip相當于從那條記錄開始
    query.limit(PAGE_SIZE);// 從skip開始,取多少條記錄
     
    List<T> datas = this.find(query);
     
    page.build(datas);//獲取數據  
     
    return page;
  }

上面的代碼中Pagination類保存了分頁所需的必要的數據,比如當前頁currentPage,總頁數totalPage,總條數totalCount,當然還有數據集合List 用來保存頁面所需的數據。另外getEntityClass()是T所對應的class對象(由子類來具體實現)。例如項目中有一個子類VideoMongodbDao

?
1
2
3
4
5
6
7
8
@Service
public class VideoMongodbDao extends MongodbBaseDao<Video> {
 
  @Override
  protected Class<Video> getEntityClass() {
    return Video.class;
  }
}

分頁數據封裝類Pagination<T>,里面提供了分頁的數據

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Pagination<T> {
 
  /** 每頁顯示條數 */
  private Integer pageSize = 8;
 
  /** 當前頁 */
  private Integer currentPage = 1;
 
  /** 總頁數 */
  private Integer totalPage = 1;
 
  /** 查詢到的總數據量 */
  private Integer totalNumber = 0;
 
  /** 數據集 */
  private List items;
 
  public Integer getPageSize() {
 
    return pageSize;
  }

Pagination類還有一個重要的build方法,根據該類封裝的數據來設定分了多少頁,具體實現方法如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
   * 處理查詢后的結果數據
   *
   * @param items
   *      查詢結果集
   * @param count
   *      總數
   */
  public void build(List items) {
    this.setItems(items);
    int count = this.getTotalNumber();
    int divisor = count / this.getPageSize();
    int remainder = count % this.getPageSize();
    this.setTotalPage(remainder == 0 ? divisor == 0 ? 1 : divisor : divisor + 1);
  }

所以在對應的controller對應的方法中查詢的時候,可以這么處理

?
1
2
3
4
5
6
7
8
9
10
11
12
13
Query query = new Query();
    
    Criteria channleIdCri = Criteria.where("channelId").is(channel_id); 
    query.addCriteria(channleIdCri); 
    //獲取當前頁
    String currentPageStr = request.getParameter("currentPage");
    int currentPage = 0;
    if (currentPageStr != null ){
    currentPage = Integer.valueOf(currentPageStr);
    }
 
    Pagination<Video> videos = dao.getPage(currentPage, query);
    m.addAttribute("videos", videos);//from

下面需要生成分頁當行條,在這里用到了spring的標簽來處理,對應的是標簽類PaginationTag,該類封裝了頁面表單form對應的id,分頁顯示所需的數據,以及分頁顯示可點擊的頁面的長度。該類如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class PaginationTag extends TagSupport {
  /** 列表頁面的form標簽id值 */
  private String form;
   
  /** 與后臺交互,保存在request中的 數據,該數據包含l */
  private String pageInfo;//request對應的bean包含了分頁的一些數據
   
  /** 分頁顯示可點擊頁數的長度 */
  private int size;
   
  public PaginationTag(){
    this.form = "form";
    this.size = 5;
  }

生成的分頁導航條的代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
@Override
  public int doStartTag() throws JspException {
    int half = size / 2;
    int point = size / 2 + size % 2;
    int start = 1;
    int loop = size;    
    Pagination query = (Pagination) this.pageContext.getRequest().getAttribute(pageInfo);  
    int pageSize = query.getPageSize();
    int currentPage = query.getCurrentPage();
    int totalPage = query.getTotalPage();
    long totalNumber = query.getTotalNumber();   
    if(totalPage <= size){
      start = 1;
      loop = totalPage;
    }else{
      if(currentPage > point && currentPage < totalPage - half + 1){
        start = 1 + (currentPage - point);
      }else if(currentPage > totalPage - half){
        start = totalPage - size + 1;
      }
    }
       
    if(currentPage<=0){
      currentPage = 1;
    }
    StringBuilder sb = new StringBuilder();
    sb.append("<div class=\"box-ttl\"><div class=\"g4\">共 <span class=\"text-info\">");
    sb.append(totalNumber).append("</span> 條數據");
    sb.append("/共 <span class=\"text-info\">");
    if(totalNumber!=0){
      sb.append(totalPage).append("</span> 頁!</div><div class=\"box collapsed g6 flt-r\"><ul class=\"nav-menu\">");
    }else{
      sb.append(0).append("</span> 頁!</div><div class=\"box collapsed g6 flt-r\"><ul class=\"nav-menu\">");
    }    
    // 處理上一頁
    if(currentPage == 1){
      sb.append("<li class=\"disabled\"><a href=\"#\">上一頁</a></li>");
    }else{
      sb.append("<li><a href=\"javascript:dopage(" + (currentPage - 1) + ",'" + form + "');\">上一頁</a></li>");
    }    
    // 處理中間數據
    for(int i = start; i < start + loop; i++){
      //<li class="active"><a href="#" rel="external nofollow" rel="external nofollow" >1</a></li>
      if(currentPage == i){
        sb.append("<li class=\"active\"><a href=\"#\">" + i + "</a></li>");
      }else{
        //<li><a href="#" rel="external nofollow" rel="external nofollow" >2</a></li>
        sb.append("<li><a href=\"javascript:dopage(" + i + ",'" + form + "');\">" + i + "</a></li>");
      }
    }    
    // 處理下一頁
    if(currentPage == totalPage){
      sb.append("<li class=\"disabled\"><a href=\"#\">下一頁</a></li>");
    }else{
      sb.append("<li><a href=\"javascript:dopage(" + (currentPage + 1) + ",'" + form + "');\">下一頁</a></li>");
    }
         
    sb.append("</ul></div></div>");
 
    sb.append("<input type=\"hidden\" id=\"currentPage\" name=\"currentPage\" value=\"" + currentPage + "\"/>");
     
    try {
      pageContext.getOut().write(sb.toString());
    } catch (IOException e) {
      throw new JspException(e.toString(), e);
    }      
    return super.doStartTag();
  }

有上面的標簽可以發現,每次點擊頁面頁數的時候是用過js的dopage方法來實現的,該js方法根據form.submit()來提交信息查詢信息(特別是currentPage數據)
js的代碼如下

?
1
2
3
4
function dopage(currentPage,formid){
  $("#currentPage").val(currentPage);
  $("#" + formid).submit();
}

在jsp頁面中只需要添加上述標簽即可(標簽類Pagination以及轉換成tld文件了—)

?
1
2
3
<div>
  <tv:pagination pageInfo="videos" form="video-form" size="5"></tv:pagination
</div>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/chunqiuwei/article/details/17188523

延伸 · 閱讀

精彩推薦
  • JAVA教程使用java執行定時任務示例

    使用java執行定時任務示例

    這篇文章主要介紹了使用java執行定時任務示例,需要的朋友可以參考下 ...

    java教程網4882019-11-17
  • JAVA教程輕松掌握Java命令模式

    輕松掌握Java命令模式

    這篇文章主要幫助大家輕松掌握Java命令模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    斷了聯系3752020-06-19
  • JAVA教程java中this與super關鍵字的使用方法

    java中this與super關鍵字的使用方法

    這篇文章主要介紹了java中this與super關鍵字的使用方法的相關資料,希望通過本文能幫助到大家,讓大家徹底理解應用java中this與super,需要的朋友可以參考下...

    CSDN7812021-01-06
  • JAVA教程java郵件發送簡單實現代碼

    java郵件發送簡單實現代碼

    這篇文章主要為大家詳細介紹了java郵件發送簡單實現代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    半路出家的程序員2992020-08-24
  • JAVA教程JAVAEE Filter 過濾器設置是否緩存實例詳解

    JAVAEE Filter 過濾器設置是否緩存實例詳解

    網頁中,每次的客戶端訪問服務器,有部分不用重復請求的,這樣可以減輕服務器的工作量。那么如何設置客戶端是否都緩存呢?接下來通過本文給大家介...

    YX_blog2952020-05-01
  • JAVA教程Java日期時間以及日期相互轉換

    Java日期時間以及日期相互轉換

    這篇文章主要為大家詳細介紹了Java日期時間,以及日期相互轉換的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    溪山晴雪6492021-01-16
  • JAVA教程Java中Volatile關鍵字詳解及代碼示例

    Java中Volatile關鍵字詳解及代碼示例

    這篇文章主要介紹了Java中Volatile關鍵字詳解及代碼示例,分為兩個部分,第一部分介紹了Volatile關鍵字的基本概念等內容,第二部分分享了實例代碼,具有...

    鄭州的文武5682021-02-05
  • JAVA教程常用Eclipse快捷方式(推薦)

    常用Eclipse快捷方式(推薦)

    下面小編就為大家帶來一篇常用Eclipse快捷方式(推薦)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian2812020-05-08
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产精品免费视频一区 | 欧美bbbxxx| 精品国产乱码久久久久久丨区2区 | 成人二区 | 婷婷国产 | 日本中文字幕在线 | 午夜视频播放 | 国产片性视频免费播放 | 成人三级视频 | 日韩色av | 91精品国产91久久综合桃花 | 极品粉嫩饱满一线天在线 | 成年人免费网站 | 成人午夜在线 | 午夜日韩| 转生成为史莱姆这档事第四季在线观看 | 精品黄色一级片 | 久久久久久毛片免费看 | 丝袜+亚洲+另类+欧美+变态 | 不卡一区二区三区四区 | 日日操综合| 亚洲视频在线观看 | 亚洲二区视频 | 91精品国产综合久久久久久漫画 | 久久精品国产亚洲一区二区三区 | 黄色av电影| 免费一区二区 | 久久99精品国产自在现线 | 91精品啪aⅴ在线观看国产 | 亚洲综合中文字幕在线观看 | 日韩在线国产精品 | 91在线网 | 成人午夜毛片 | 榴莲视频成人在线观看 | 日韩精品一区在线 | 日韩av电影在线观看 | 性色av一区二区三区 | 亚洲第一av | 激情五月激情综合网 | 欧美久| 精品一区二区三区视频 |