mysql自带分页_MySql 分页

MySql 分页

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

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

首先,创建一个Page VO类

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

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

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

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

1 packagecom.ctrl.vo;2

3 public classPage {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 intgetTotalPage() {11 returntotalPage;12 }13

14 public void setTotalPage(int totalRecord, intpageSize) {15 if (totalRecord % pageSize == 0)16 this.totalPage = totalRecord /pageSize;17 else

18 this.totalPage = totalRecord / pageSize + 1;19 }20

21 public intgetCurrentPage() {22 returncurrentPage;23 }24

25 public void setCurrentPage(int currentRecord, intpageSize) {26 if (currentRecord % pageSize == 0)27 this.currentPage = currentRecord /pageSize;28 else

29 this.currentPage = currentRecord / pageSize + 1;30 }31

32 public intgetTotalRecord() {33 returntotalRecord;34 }35

36 public void setTotalRecord(inttotalRecord) {37 this.totalRecord =totalRecord;38 }39

40 public intgetCurrentRecord() {41 returncurrentRecord;42 }43

44 public void setCurrentRecord(intcurrentRecord) {45 this.currentRecord =currentRecord;46 }47

48 @Override49 publicString toString() {50 return "Page [totalPage=" + totalPage + ", currentPage=" +currentPage51 + ", totalRecord=" + totalRecord + ", currentRecord="

52 + currentRecord + ", pageSize=" + pageSize + "]";53 }54

55 public intgetPageSize() {56 returnpageSize;57 }58

59 public void setPageSize(intpageSize) {60 this.pageSize =pageSize;61 }62

63 }

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

IDNAMECODEPWDSTATEFLAGUpdate

${user.id }${user.name }${user.code }${user.pwd }${user.state }${user.flag } update

href="/showLimitUsers?currentRecord=${page.currentRecord}&type=prev">前一页

/

href="/showLimitUsers?currentRecord=${page.currentRecord}&type=next"> 后一页

.....

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

Page page = newPage();

UserService userService= newUserServiceImpl();//去掉管理员

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 users =userService.getLimitUsers(page.getCurrentRecord(),

page.getPageSize());

page.setCurrentPage(page.getCurrentRecord(), page.getPageSize());

HttpSession session=request.getSession();//标签是否显示

session.setAttribute("flag", "T");

session.setAttribute("users", users);

session.setAttribute("page", page);

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

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

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

效果图:

1au0LMhrhfYAAAAAElFTkSuQmCC

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

心得:

分页不难,但还是会出现bug,需要好好调试。可以通过打印Page&将所传的值在input标签显示方便调试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值