您的位置:首页 > 数据库 > MySQL

MySql 分页

2016-03-06 16:56 363 查看
MySql 分页
 

由于最近项目需要,于是就简单写了个分页查询。总体而言MySql 分页机制较为简单。数据库方面只需要使用limit即可实现分页。前后台交互就直接用session传了值。

下面就写写具体的实现过程:

首先,创建一个Page VO类

  其中,总记录数可由数据库查得、每页默认记录数由你自己设定;

  总页数由总记录数及每页默认记录数获取,当然得有一个条件判断;

  当前页数由当前记录数及每页默认记录数获取,当然这也得有一个条件判断;

  当前记录条数可由页面传值同时配合每页默认记录数获取。

1 package com.ctrl.vo;
2
3 public class Page {
4     private int totalPage;// 总页数
5     private int currentPage;// 当前页
6     private int totalRecord;// 总记录数
7     private int currentRecord=0;// 当前记录条数
8     private int pageSize = 10;// 每页默认记录数
9
10     public int getTotalPage() {
11         return totalPage;
12     }
13
14     public void setTotalPage(int totalRecord, int pageSize) {
15         if (totalRecord % pageSize == 0)
16             this.totalPage = totalRecord / pageSize;
17         else
18             this.totalPage = totalRecord / pageSize + 1;
19     }
20
21     public int getCurrentPage() {
22         return currentPage;
23     }
24
25     public void setCurrentPage(int currentRecord, int pageSize) {
26         if (currentRecord % pageSize == 0)
27             this.currentPage = currentRecord / pageSize;
28         else
29             this.currentPage = currentRecord / pageSize + 1;
30     }
31
32     public int getTotalRecord() {
33         return totalRecord;
34     }
35
36     public void setTotalRecord(int totalRecord) {
37         this.totalRecord = totalRecord;
38     }
39
40     public int getCurrentRecord() {
41         return currentRecord;
42     }
43
44     public void setCurrentRecord(int currentRecord) {
45         this.currentRecord = currentRecord;
46     }
47
48     @Override
49     public String toString() {
50         return "Page [totalPage=" + totalPage + ", currentPage=" + currentPage
51                 + ", totalRecord=" + totalRecord + ", currentRecord="
52                 + currentRecord + ", pageSize=" + pageSize + "]";
53     }
54
55     public int getPageSize() {
56         return pageSize;
57     }
58
59     public void setPageSize(int pageSize) {
60         this.pageSize = pageSize;
61     }
62
63 }


其次,showUsers.jsp页面(有省略,且部分名修改)

<c:choose>
<c:when test="${users != null }">
<br>
<form action="#" method="post">
<table class="table table-striped table-bordered">
<thead>
<tr>
<td>ID</td>
<td>NAME</td>
<td>CODE</td>
<td>PWD</td>
<td>STATE</td>
<td>FLAG</td>
<td>Update</td>
</tr>
</thead>
<c:forEach items="${users }" var="user">
<tr>
<td>${user.id }</td>
<td>${user.name }</td>
<td>${user.code }</td>
<td>${user.pwd }</td>
<td>${user.state }</td>
<td>${user.flag }</td>
<td><a href="update.jsp?user=${user }">update</a></td>
</tr>
</c:forEach>
</table>
</form>
<c:if test="${flag=='T'}">
<a
href="<%=request.getContextPath()%>/showLimitUsers?currentRecord=${page.currentRecord}&type=prev">前一页</a>
/<a
href="<%=request.getContextPath()%>/showLimitUsers?currentRecord=${page.currentRecord}&type=next"> 后一页</a>
</c:if>
.....


对于,servlet后台(SERVICE、DAO层代码省略...)

Page page = new Page();
UserService userService = new UserServiceImpl();
//去掉管理员
long totalRecord = userService.getUsersCount() - 1;
page.setTotalRecord((int) totalRecord);
page.setTotalPage(page.getTotalRecord(), page.getPageSize());
String type = request.getParameter("type");
if (request.getParameter("currentRecord") != null
&& !request.getParameter("currentRecord").equals("")) {
int currentRecord = Integer.parseInt(request
.getParameter("currentRecord"));
page.setCurrentRecord(currentRecord);
page.setCurrentPage(page.getCurrentRecord(), page.getPageSize());
if ("next".equals(type)
&& page.getCurrentPage() < (page.getTotalPage() - 1)) {
currentRecord = currentRecord + 10;
page.setCurrentRecord(currentRecord);
} else if ("prev".equals(type) && page.getCurrentPage() > 0) {
currentRecord = currentRecord - 10;
page.setCurrentRecord(currentRecord);
}
} else {
page.setCurrentRecord(0);
}
List<User> users = userService.getLimitUsers(page.getCurrentRecord(),
page.getPageSize());
page.setCurrentPage(page.getCurrentRecord(), page.getPageSize());

HttpSession session = request.getSession();
//<a>标签是否显示
session.setAttribute("flag", "T");
session.setAttribute("users", users);
session.setAttribute("page", page);

response.sendRedirect(request.getContextPath() + "/showUsers.jsp");


当用户点击了next,当前记录数就加pageSize,prev则减去pageSize。同时当前页也需要与总页数之间进行比较,以防超越了页数范围。

由于未将所有功能均设置分页,故设定flag标志,当页面其他功能不需要分页的话,可以将分页<a>消除。

 

效果图:

PS:文中Page VO为借鉴而来。

心得:

  分页不难,但还是会出现bug,需要好好调试。可以通过打印Page&将所传的值在input标签显示方便调试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: