效果:首页 上一页 当前页 下一页 尾页
分页功能的实现:
物理分页:一次只查n条记录,点击下一页,再去查后n条,使用sql语句进行控制的分页。
缺点:经常需要和数据库交互;
优点:数据量特别大,不会导致内存的溢出;
逻辑分页:一次性将所有数据全部都查询出来,根据需要进行截取,List集合进行控制subList();
缺点:数据量如果特别大,容易导致内存溢出;
优点:与数据库交互次数少;
不同的数据库对分页的语句也是不一样的:
oracle:使用sql嵌套;
sqlserver:使用top关键字;
mysql:使用limit关键字:
eg:select * from table where...group by...having...order by...limit begin,pageSize;
分析:begin:从第几条数据开始查询;pageSize:查询多少条数据
currPage | begin | pagesize |
1 | 0 | 10 |
2 | 10 | 10 |
3 | 20 | 10 |
currPage:表示当前页码
可以通过左方表格推算出各个参数之间的关系:
begin =( currPage - 1 ) * pagesize
参数的传递:
前台--->后台:currPage
后台--->前台:currPage【当前页】,totalPage【总页数】,totalCount【总记录数】,pageSize【每页显示条数】,List【显示数据集合】
后台到前台传递的数据使用javabean来封装参数方便传递:
package pojo; import java.util.List; public class PageBean { private int currPage;//当前页 private int totalCount;//总记录数 private int totalPage;//总页数 private int pageSize;//每页显示数 private List<Product> productList;//显示数据集合 public int getCurrPage() { return currPage; } public void setCurrPage(int currPage) { this.currPage = currPage; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public List<Product> getProductList() { return productList; } public void setProductList(List<Product> productList) { this.productList = productList; } }
通过request域将该数据传递到jsp页面显示:
<c:if test="${pageBean.currPage != 1}"> <a href = "${ pageContext.request.contextPath }/SearchByPage?currPage=1">首页</a> <a href = "${ pageContext.request.contextPath }/SearchByPage?currPage=${pageBean.currPage - 1}">上一页</a> </c:if> ${ pageBean.currPage } <c:if test="${pageBean.currPage != pageBean.totalPage}"> <a href = "${ pageContext.request.contextPath }/SearchByPage?currPage=${pageBean.currPage + 1}">下一页</a> <a href = "${ pageContext.request.contextPath }/SearchByPage?currPage=${pageBean.totalPage}">尾页</a> </c:if>