一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 編程語言 - Java教程 - springmvc 分頁查詢的簡單實現示例代碼

springmvc 分頁查詢的簡單實現示例代碼

2020-07-23 11:52GreenRookie Java教程

我們在開發項目中很多項目都用到列表分頁功能,本篇介紹了springmvc 分頁查詢的簡單實現示例代碼,非常具有實用價值,需要的朋友可以參考下。

目前較常用的分頁實現辦法有兩種:

1.每次翻頁都修改SQL,向SQL傳入相關參數去數據庫實時查出該頁的數據并顯示。

2.查出數據庫某張表的全部數據,再通過在業務邏輯里面進行處理去取得某些數據并顯示。

對于數據量并不大的簡單的管理系統而言,第一種實現方法相對來說容易使用較少的代碼實現分頁這一功能,本文也正是為大家介紹這種方法:

代碼片段:

1,Page.java

?
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
package com.cm.contract.common;
 
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
 
 
 
/**分頁類
 * @author FENGWEI
 * @date 2016-5-23
 */
public class Page implements java.io.Serializable{
   
  private static final long serialVersionUID = 1L;
  //前一頁
  private Boolean hasPrePage;
  //后一頁
  private Boolean hasNextPage;
  //每頁顯示多少條:默認20條
  private Long everyPage = 20L;
  //總頁數
  private Long totalPage;
  //當前第多少頁:默認第1頁
  private Long currentPage = 1L;
  //開始下標
  private Long beginIndex;
  //結束下標
  private Long endinIndex;
  //總共多少條
  private Long totalCount;  
  //排序列名
  private String sortName;  
  //排序狀態
  private String sortState;  
  //排序信息
  private String sortInfo;
  //是否排序
  private Boolean sort = false;
  private String defaultInfo = " ";
   
   
   
  public String getDefaultInfo() {
    return defaultInfo;
  }
 
  public void setDefaultInfo(String defaultInfo) {
    this.defaultInfo = defaultInfo;
  }
 
  public String getSortInfo() {
    return sortInfo;
  }
 
  public void setSortInfo(String sortInfo) {
    this.sortInfo = sortInfo;
  }
 
  public String getSortName() {
    return sortName;
  }
 
  public void setSortName(String sortName) {
    setPageSortState(sortName);   
  }
 
  public String getSortState() {
    return sortState;
  }
 
  public void setSortState(String sortState) {
    this.sortState = sortState;
  }
 
   
  public Page() {
  }
 
  /**
   * 常用,用于計算分頁
   * */
  public Page(Long totalRecords){   
    this.totalCount = totalRecords;
    setTotalPage(getTotalPage(totalRecords));   
  }
   
  /**
   * 設置每頁顯示多少條時使用
   * */
  public Page(Long everyPage,Long totalRecords){ 
    this.everyPage = everyPage;
    this.totalCount = totalRecords;
    setTotalPage(getTotalPage(totalRecords));   
  }
   
  /**
   * @param state  狀態碼
   * @param value  到第多少頁或者設置每頁顯示多少條或者為排序列名
   */
  public void pageState(int index,String value) {        
    sort = false;
    switch (index) {
    case 0 :setEveryPage(Long.parseLong(value));break;
    case 1 :first();break;
    case 2: previous();break;
    case 3: next();break;
    case 4: last();break;
    case 5: sort = true;sort(value);break;
    case 6 ://到指定第多少頁
      setCurrentPage(Long.parseLong(value));
      break;     
    }
  }
 
  /**
   * 最前一頁
   */
  private void first() {
    currentPage = 1L;
  }
 
  private void previous() {
    currentPage--;
  }
 
  private void next() {
    currentPage++;
  }
 
  private void last() {
    currentPage = totalPage;
  }
 
  private void sort(String sortName) {    
    //設置排序狀態
    setPageSortState(sortName);   
  }
     
   
   
  /**
   * 計算總頁數
   * */
  private Long getTotalPage(Long totalRecords) {
     Long totalPage = 0L;  
     everyPage = everyPage == null ? 10L : everyPage;
     if (totalRecords % everyPage == 0)
      totalPage = totalRecords / everyPage;
     else {
      totalPage = totalRecords / everyPage + 1;
     }
     return totalPage;
  }  
   
 
  public Long getBeginIndex() {
    this.beginIndex = (currentPage - 1) * everyPage;
    return this.beginIndex;
  }
 
  public void setBeginIndex(Long beginIndex) {
    this.beginIndex = beginIndex;
  }
 
  public Long getCurrentPage() {
    this.currentPage = currentPage == 0 ? 1 : currentPage;
    return this.currentPage;
  }
 
  public void setCurrentPage(Long currentPage) {
    if(0 == currentPage){
      currentPage = 1L;
    }
    this.currentPage = currentPage;
  }
 
  public Long getEveryPage() {
    this.everyPage = everyPage == 0 ? 10 : everyPage;
    return this.everyPage;
  }
 
  public void setEveryPage(Long everyPage) {   
    this.everyPage = everyPage;
  }
 
  public Boolean getHasNextPage() {
    this.hasNextPage = (currentPage != totalPage) && (totalPage != 0);
    return this.hasNextPage;
  }
 
  public void setHasNextPage(Boolean hasNextPage) {
    this.hasNextPage = hasNextPage;
  }
 
  public Boolean getHasPrePage() {
    this.hasPrePage = currentPage != 1;
    return this.hasPrePage;
  }
 
  public void setHasPrePage(Boolean hasPrePage) {
    this.hasPrePage = hasPrePage;
  }
 
  public Long getTotalPage() {
    return this.totalPage;
  }
 
  public void setTotalPage(Long totalPage) {
    if(this.currentPage > totalPage){
      this.currentPage = totalPage;
    }
    this.totalPage = totalPage;
  }
 
  public Long getTotalCount() {
    return this.totalCount;
  }
 
  public void setTotalCount(Long totalCount) {
    setTotalPage(getTotalPage(totalCount)); 
    this.totalCount = totalCount;
  }
 
  @Override
  public String toString() {
    return ToStringBuilder.reflectionToString(this);
  }
   
  /**
   * 設置排序狀態
   * */
  private void setPageSortState(String newPageSortName){   
    //判斷之前的排序字段是否為空
    if(StringUtils.isEmpty(sortName)){
      //默認排序為升序
      this.sortState = PageUtil.ASC;   
      this.sortInfo = PageUtil.PAGE_ASC;           
    }else{
      if(StringUtils.equalsIgnoreCase(newPageSortName, sortName)){
        //判斷sortState排序狀態值
        if(StringUtils.equalsIgnoreCase(sortState, PageUtil.ASC)){
          this.sortState = PageUtil.DESC;
          this.sortInfo = PageUtil.PAGE_DESC;               
        }else{
          this.sortState = PageUtil.ASC;
          this.sortInfo = PageUtil.PAGE_ASC;         
        }        
      }else{
        //默認
        this.sortState = PageUtil.ASC;   
        this.sortInfo = PageUtil.PAGE_ASC;
      }
    }
    sortName = newPageSortName.toLowerCase();      
  }
 
  public Boolean isSort() {
    return sort;
  }
 
  public void setSort(Boolean sort) {
    this.sort = sort;
  }
 
 
  public Long getEndinIndex() {
    this.endinIndex = (currentPage) * everyPage;
    return endinIndex;
  }
 
  public void setEndinIndex(Long endinIndex) {
    this.endinIndex = endinIndex;
  }  
}

2.PageState.java

?
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
package com.cm.contract.common;
 
import org.apache.commons.lang.StringUtils;
 
 
 
 
/**分頁狀態類
 * @author FENGWEI
 * @date 2016-5-23
 */
public enum PageState {
   
  /**
   * 設置每頁顯示多少條
   * */
  SETPAGE,
  /**
   * 首頁
   * */
  FIRST, 
  /**
   * 向前一頁
   * */
  PREVIOUS, 
  /**
   * 向后一頁
   * */
  NEXT, 
  /**
   * 末頁
   * */
  LAST, 
  /**
   * 排序
   * */
  SORT,
  /**
   * 到第多少頁
   * */
  GOPAGE;
 
   
  /**
   * @param value 索引名稱
   * @return 返回索引下標
   */
  public static int getOrdinal(String value) {
    int index = -1;
    if (StringUtils.isEmpty(value)) {
      return index;
    }
    String newValue = StringUtils.trim(value).toUpperCase();
    try {
      index = valueOf(newValue).ordinal();
    } catch (IllegalArgumentException e) {}
    return index;
  }
}

3.PageUtil.java

?
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
/**
 * 分頁工具類
 * @author FENGWEI
 * @date 2016-5-23
 */
public class PageUtil {
   
  public static final String ASC = "asc";
  public static final String DESC = "desc";
  public static final String PAGE_DESC = "↓";
  public static final String PAGE_ASC = "↑";
  public static final String PAGE_NULL = " "
  public static final String SESSION_PAGE_KEY = "page";  
   
   
  /**
   * 初始化分頁類
   * @param initPageSql 未分頁的查詢SQL
   * @param totalCount  總行數
   * @param index    分頁狀態
   * @param value    只有在設置每頁顯示多少條時,值不會NULL,其它為NULL
   */
  public static Page inintPage(Long totalCount,Integer index,String value,Page sessionPage){ 
    Page page = null;
    if(index < 0){
       page = new Page(totalCount);
    }else{
       /**每頁顯示多少條*/
       Long everPage = null == value ? 10 : Long.parseLong(value);
       /**獲取Session中的分頁類,方便保存頁面分頁狀態*/
       page = sessionPage;       
       page.setEveryPage(everPage);
       page.setTotalCount(totalCount);      
    }  
    return page;    
  }
   
   
 
   
  /**
   * 當頁點擊:首頁,前一頁,后一頁,末頁,排序,到第多少頁時進行分頁操作
   * @param index 分頁狀態
   * @param value 排序字段名或者到第多少頁
   */
  public static Page execPage(int index,String value,Page sessionPage){ 
    Page page = sessionPage;      
    /**調用方法進行分頁計算*/
    page.pageState(index,value);    
    return page;    
  }
 
}

4.DefaultController.java  此部分可以靈活使用

?
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
package com.cm.contract.common;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.springframework.web.bind.annotation.ModelAttribute;
 
/**
 * 提取公用的request和response Title:DefaultController Descrption:
 *
 * @author FENGWEI
 * @date 2016-5-6下午3:30:32
 */
public class DefaultController {
 
  /**
   * oracel的三層分頁語句 子類在展現數據前,進行分頁計算!
   *
   * @param querySql
   *      查詢的SQL語句,未進行分頁
   * @param totalCount
   *      根據查詢SQL獲取的總條數
   * @param columnNameDescOrAsc
   *      列名+排序方式 : ID DESC or ASC
   */
  protected Page executePage(HttpServletRequest request, Long totalCount) {
    if (null == totalCount) {
      totalCount = 0L;
    }
    /** 頁面狀態,這個狀態是分頁自帶的,與業務無關 */
    String pageAction = request.getParameter("pageAction");
    String value = request.getParameter("pageKey");
 
    /** 獲取下標判斷分頁狀態 */
    int index = PageState.getOrdinal(pageAction);
 
    Page page = null;
    /**
     * index < 1 只有二種狀態 1 當首次調用時,分頁狀態類中沒有值為 NULL 返回 -1 2 當頁面設置每頁顯示多少條:
     * index=0,當每頁顯示多少條時,分頁類要重新計算
     * */
    Page sessionPage = getPage(request);
 
    if (index < 1) {
      page = PageUtil.inintPage(totalCount, index, value, sessionPage);
    } else {
      page = PageUtil.execPage(index, value, sessionPage);
    }
    setSession(request, page);
    return page;
  }
 
  private Page getPage(HttpServletRequest request) {
    Page page = (Page) request.getSession().getAttribute(
        PageUtil.SESSION_PAGE_KEY);
    if (page == null) {
      page = new Page();
    }
    return page;
  }
 
  private void setSession(HttpServletRequest request, Page page) {
    request.getSession().setAttribute(PageUtil.SESSION_PAGE_KEY, page);
  }
}

使用方法:

5,Controller.java

?
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
/**
   * model 添加的分頁條件
   * executePage 方法寫在工具類中
   * @param model
   */
@Controller
public class CMLogController extends DefaultController {
@RequestMapping("index.do")
  public ModelAndView userInto(ModelMap model, String username) {
    nameStr = username;
    model.addAttribute("username", nameStr);
    // 分頁數
    Long totalCount = logService.pageCounts(model);
    // 分頁顯示
    Page page = executePage(request, totalCount);
    if (page.isSort()) {
      model.put("orderName", page.getSortName());
      model.put("descAsc", page.getSortState());
    } else {
      model.put("orderName", "logtime");
      model.put("descAsc", "desc");
    }
    model.put("startIndex", page.getBeginIndex());
    model.put("endIndex", page.getEndinIndex());
    ModelAndView mv = new ModelAndView();
    // 分頁查詢
    logList = logService.pageList(model);
    mv.addObject("logList", logList);
    mv.setViewName("/jsp/log");
    return mv;
  }}

6.maybatis中幾條查詢語句

?
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
//分頁查詢
<select id="pageList" parameterType="map" resultMap="BaseResultMap">  
     
    select ttt.* from(select tt.*,rownum rn from(select * from CM_LOG
    <where>     
      <if test="username != null and username != ''">
        <!-- 
         特別提醒一下, $只是字符串拼接, 所以要特別小心sql注入問題。
         在開發時使用: $,方便調試sql,發布時使用: #
        -->
        and username like '%${username}%'          
      </if>
       <if test="type != null and type != ''">
        <!-- 
         特別提醒一下, $只是字符串拼接, 所以要特別小心sql注入問題。
         在開發時使用: $,方便調試sql,發布時使用: #
        -->
        AND TYPE = #{type,jdbcType=VARCHAR}   
      </if>
     </where
     order by ${orderName} ${descAsc} )tt)ttt
     <where
      <if test="startIndex != null and startIndex != ''">
        rn > ${startIndex}          
      </if
      <if test="endIndex != null and endIndex != ''">       
         <![CDATA[ and rn <= ${endIndex} ]]>               
      </if>  
     </where>     
</select>
// 分頁數
 <select id="pageCounts" parameterType="map" resultType="long">  
  select count(*) from CM_LOG 
  <where
  <if test="username != null and username != ''">
    and username like '%${username}%'         
  </if
  </where
</select>

7.前臺頁面index.jsp

?
1
2
3
4
5
6
7
8
9
10
11
12
//只需在頁面布局添加該div
  //username 為條件 
  // <jsp:param name="url" value="/log/index.do?"/>    不帶條件的方式 問號必須存在
<body >
  <div align="right" style="height: 20">
      <jsp:include page="/jsp/page.jsp">
          <jsp:param name="url" value="/log/index.do?username=${username }"/>    
 
        </jsp:include>
    </div>
 
    </body >

8,引用的Page.jsp

?
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
69
70
71
72
73
74
75
  <%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="page" value="${sessionScope.page}" />
<c:set var="path" value="${pageContext.request.contextPath}" />
<c:set var="url" value="${param.url}" />
<c:set var="urlParams" value="${param.urlParams}" />
<c:set var="pathurl" value="${path}/${url}" />
<tr>
  <td colspan="5">
  ${urlParams }
    共${page.totalCount}條記錄 共${page.totalPage}頁 每頁顯示${page.everyPage}條
    當前第${page.currentPage}頁 
    <c:choose>
      <c:when test="${page.hasPrePage eq false}">
        <<首頁 <上頁 
      </c:when>
      <c:otherwise>
        <a href="${pathurl}&pageAction=first${urlParams}"><<首頁 </a> 
        <a href="${pathurl}&pageAction=previous${urlParams}" /><上一頁</a>
      </c:otherwise>
    </c:choose>
     || 
    <c:choose>
      <c:when test="${page.hasNextPage eq false}">
         下頁> 尾頁>>
      </c:when>
      <c:otherwise>
        <a href="${pathurl}&pageAction=next${urlParams}">下一頁> </a> 
        <a href="${pathurl}&pageAction=last${urlParams}">末頁>></a>
      </c:otherwise>
    </c:choose>
      
    <SELECT name="indexChange" id="indexChange"
      onchange="getCurrentPage(this.value);">
      <c:forEach var="index" begin="1" end="${page.totalPage}" step="1">
        <option value="${index}" ${page.currentPage eq index ? "selected" : ""}>
          第${index}頁
        </option>
      </c:forEach>
    </SELECT>
      
    每頁顯示:<select name="everyPage" id="everyPage" onchange="setEveryPage(this.value);">
          <c:forEach var="pageCount" begin="5" end="${page.totalCount}" step="5">            
            <option value="${pageCount}" ${page.everyPage eq pageCount ? "selected" : ""}>
              ${pageCount}條
            </option>
          </c:forEach>
        </select>
  </td>
</tr>
<div style='display: none'>
  <a class=listlink id="indexPageHref" href='#'></a>
</div>
<script>
function getCurrentPage(index){ 
  var a = document.getElementById("indexPageHref");  
  a.href = '${pathurl}&pageAction=gopage&pageKey='+index+'${urlParams}';    
  a.setAttribute("onclick",'');     
  a.click("return false");  
}
function setEveryPage(everyPage){  
  var a = document.getElementById("indexPageHref");
  var currentPage = document.getElementById('indexChange').value;
  a.href = '${pathurl}&pageAction=setpage&pageKey='+everyPage+'${urlParams}';    
  a.setAttribute("onclick",'');     
  a.click("return false");  
}
function sortPage(sortName){  
  var a = document.getElementById("indexPageHref");  
  a.href = '${pathurl}&pageAction=sort&pageKey='+sortName+'${urlParams}';   
  a.setAttribute("onclick",'');   
  a.click("return false");  
}
</script>

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

原文鏈接:http://blog.csdn.net/fiangasdre/article/details/51741456

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 桃乃木香奈ipx在线播放 | 成人在线观看视频免费 | 日韩伦理在线观看 | 亚洲AV蜜桃永久无码精品无码网 | 国产精品视频久久久 | 天天综合天天影视色香欲俱全 | 国产综合成人久久大片91 | 国产成人亚洲精品一区二区在线看 | 亚洲AV蜜桃永久无码精品红樱桃 | 男人使劲躁女人视频免费 | 人人福利 | 亚洲欧美日韩国产精品影院 | 亚洲精品一区在线观看 | 欧美日韩国产在线一区 | 欧美免赞性视频 | 免费波多野结衣庭教师 | 美女被网站 | 91久久色 | 日本一在线中文字幕天堂 | www视频免费看 | 99久久精品国产一区二区 | 九九国产在线视频 | 青柠影院在线观看免费完整版1 | 草莓丝瓜芭乐樱桃榴莲色多黄 | 暖暖暖免费观看在线观看 | 色帝国亚洲欧美在线蜜汁tv | 日韩在线1 | 极品蜜桃臀美女啪啪 | 北条麻妃黑人 | 午夜伦理:伦理片 | 小鸟酱在线播放 | 91久久福利国产成人精品 | tube性睡觉hd | 欧美视频一区二区三区在线观看 | 成年人在线免费看 | 32d乳白色的奶罩未删除 | 草莓社区| 欧美人妖另类性hd | 范冰冰特黄xx大片 | 精品综合 | 美女污视频在线观看 |