分页代码片段

1. 分页原理介绍

分页介绍

分页就是将数据以多页展示出来

分页作用

为了提高用户的感受

分页技术分类

物理分页

只从数据库中查询出要显示的数据

优点:不占用很多内存

缺点:速度比较低,每一次都要从数据库中获取

逻辑分页

从数据库中将所有记录查找到,存储到内存中,需要什么数据

直接从内存中获取.

优点:速度比较快

缺点:占用比较多的内存,如果数据比较多,可以出现内在溢出。

数据实时更新需要单独处理.

mysql中limit介绍

利用mysql的limit,进行物理分页。

格式1:

select * from 表名 limit m,n;


m是从0开始,代表是第几条记录

n代表显示多少条记录

可以理解从第m+1条记录到m+n条记录 闭合区间[m+1,m+n]

格式2:

select * from 表名 limit n;

可以理解为前n条记录

等价于:

select * from 表名 limit 0,n;

例如

select * from person limit 4,10;


从第5条记录开始,显示10条.也就是[5,14]

分页实现原理分析

a.明确一共多少条记录

select coun(*) from 表;

b.明确每一页显示多少条记录

自己定义或者从前台传过来

c.计算一共多少页

计算方式1:总条数%每页条数==0?总条数/每页条数:总条数/每页条数+1

计算方式2:Math.ceil(总条数*1.0/每页条数)

d.查看第几页

默认第一页,从前台页面传过来

点击上一页下一页的时候,就是对当前页加或者减1操作

e.当前页码的数据

通过limit查询出数据

例如:每页显示5条,查询第3页数据

select * from 表 limit (3-1)*5,5;

用(当前页码-1)*每页条数,就求出了开始的记录位置,在向下查找每页数个记录。就得到了这页的数据.

2. 分页功能分析

执行流程:

a从index.jsp链接进入商品列表页面,默认访问第一页的数据,

b.发送至findProductsByPageServlet查询第一页数据,每页的条数默认为4条,

需要两个参数:当前页页码和每页显示的条数

c.调用productService的findProductsByPage(int 当前页,int 每页条数),返回值为bean对象.将当前页码,每页条数,总条数,总页数以及当前页的图书列表封装成pageBean,

d.将pagebean放到request域中,返回给product_list.jsp

e.在jsp页面将数据遍历

3. 分页功能实现

编写PageBean

private Integer currentPage;//当前页码
private Integer pageSize;//每页条数
private Integer totalPage;//总页数
private Integer totalCount;//总条数
private List<Product> list;//每页数据
编写servlet(分页查找)
编写productService中的分页查找方法,将查找出数据进行封装成pagebean
public PageBean findProductsByPage(int currentPage, int pageSize) throws SQLException {
//查找总条数
int totalCount=dao.getTotalCount();
//计算总页数
int totalPage=(int) Math.ceil(totalCount*1.0/pageSize);
//查询当前页数据
List<Product> list=dao.findProductsByPage(currentPage,pageSize);
//封装数据
PageBean bean=new PageBean(currentPage, pageSize, totalPage, totalCount, list);
return bean;
}


编写productDao中的方法

查看总条数

public int getTotalCount() throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDateSource());
String sql="select count(*) from products";
return ((Long) runner.query(sql, new ScalarHandler())).intValue();
}
查看当前页数据
public List<Product> findProductsByPage(int currentPage, int pageSize) throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDateSource());
String sql="select * from products limit ?,?";
return runner.query(sql, new BeanListHandler<Product>(Product.class), (currentPage-1)*pageSize,pageSize);
}

4. 设置分页条码

<c:if test="${pb.currentPage==1 }">
<li><<上一页</li>
</c:if>
<c:if test="${pb.currentPage!=1 }">
<li><a href="${pageContext.request.contextPath }/findProductsByPage?page=${pb.currentPage-1}"><<上一页</a></li>
</c:if>
<c:forEach begin="1" end="${pb.totalPage }" step="1" var="n">
<c:if test="${n == pb.currentPage}">
<li>${n }</li>
</c:if>
<c:if test="${n != pb.currentPage}">
<li><a href="${pageContext.request.contextPath }/findProductsByPage?page=${n}">${n }</a></li>
</c:if>
</c:forEach>
<c:if test="${pb.currentPage==pb.totalPage }">
<li>下一页>></li>
</c:if>
<c:if test="${pb.currentPage!=pb.totalPage }">
<li><a href="${pageContext.request.contextPath }/findProductsByPage?page=${pb.currentPage+1}">下一页>></a></li>
</c:if>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值