乔布斯斯 + 关注

签名:加油加油!

分页查询有关问题

发表于 1年前   2174次查看    0评论  1 赞

问题:什么是分页,为什么使用分页?

分页就是将数据以多页去展示,使用分页可以提高客户的感受。

分页分类:

1.物理分页

只从数据库中查询出当前页的数据。

优点:不占用很多内存

缺点:效率比较低

2.逻辑分页

从数据库中将所有记录查询出业,存储到内存中,要想展示当前页

数据,直接从内存中获取。

优点:效率高

缺点:占用内存比较高

在java开发领域,我们使用的比较多的是物理分页。

物理分页的实现:

1.直接使用jdbc完成

使用滚动结果集.  优点:跨数据库。缺点:性能低。

2.使用数据库本身提供的分页操作.

会使用每一个数据库特定的分页函数,优点:性能高  缺点:不能跨数据库。

mysql:limit

sqlservlet:top

oracle:rownum

介绍limit使用.

select * from 表 limit m,n;

m:代表的是从第几条开始  注意:它是从0开始记录.

n:代表查询几条记录.

示例:分页,每页显示6条,要查询第2页的数据.

select * from 表  limit  (页码-1)*每页条数,每页条数;

------------------------------------------------------------------------------

分页分析:

1.页码:默认第一页 

2.每页条数:人为定义

3.总条数: select count(*) from 表

4.总页数:总页数=总条数%每页条数==0?总条数/每页条数:总条数/每页条数+1

总页数=Math.ceil(总条数*1.0/每页条数);

5.当前页的数据:List<?>----->select * from 表  limit  (页码-1)*每页条数,每页条数;


----------------------------------------------------------------------------------

分页代码实现:

1.在success.jsp页面上

<a href="${pageContext.request.contextPath}/findAllByPage">查看所有客户信息(分页展示)</a><br>

2.创建CustomerFindAllByPageServlet完成分页

问题:要向页面携带的数据有很多,不仅是要展示的数据,例如:页码,总页数等,都需要携带到页面上,怎样处理?

解决方案:可以创建一个分页Bean,在这个Bean中封装所有关于分页相关的数据.

3.在showCustomerByPage.jsp页面上添加

1
2
3
4
5
6
7
<a href="/day20_1/findAllByPage?pageNum=1">首页</a>&nbsp;&nbsp;&nbsp;
  
 <a href="/day20_1/findAllByPage?pageNum=${pb.pageNum-1}">上一页</a>&nbsp;&nbsp;&nbsp;
  
 <a href="/day20_1/findAllByPage?pageNum=${pb.pageNum+1 }">下一页</a>&nbsp;&nbsp;&nbsp;
  
 <a href="/day20_1/findAllByPage?pageNum=${pb.totalPage }">尾页</a>&nbsp;&nbsp;&nbsp;


在CustomerFindAllByPageServlet中处理请求参数 pageNum

1
2
3
4
5
int pageNum = 1;
 String _pageNum = request.getParameter("pageNum");
 if (_pageNum != null) {
 pageNum = Integer.parseInt(_pageNum);
 }


问题:怎样控制上一页,下一页。

条件判断就可以解决.

1
2
3
4
5
6
7
8
9
10
11
12
13
<c:if test="${pb.pageNum==1}">
 上一页&nbsp;&nbsp;&nbsp;
 </c:if>
 <c:if test="${pb.pageNum!=1}">
 <a href="/day20_1/findAllByPage?pageNum=${pb.pageNum-1}">上一页</a>&nbsp;&nbsp;&nbsp;
 </c:if>
  
 <c:if test="${pb.pageNum==pb.totalPage}">
 下一页&nbsp;&nbsp;&nbsp;
 </c:if>
 <c:if test="${pb.pageNum!=pb.totalPage}">
 <a href="/day20_1/findAllByPage?pageNum=${pb.pageNum+1 }">下一页</a>&nbsp;&nbsp;&nbsp;
 </c:if>

--------------------------------------------------------------------

分页扩展:

1.设定每页显示条数

1.在showCustomerByPage.jsp页面上添加一个<select>

1
2
3
4
5
6
7
8
9
10
 <select name="currentPage" onchange="changeCurrentPage(this.value);">
 <option>--请选择每页条数--</option>
 <option value="5">5</option>
 <option value="10">10</option>
 <option value="20">20</option>
 </select>
  
 function changeCurrentPage(value){ 
 location.href="/day20_1/findAllByPage?currentPage="+value;
 };


2.在首页,上一页,下一页,尾页的连接上也要添加每页显示条数。

例如:

1
<a href="/day20_1/findAllByPage?pageNum=1&currentPage=${pb.currentPage}">首页</a>



3.关于页码显示

1
2
3
<c:forEach begin="1" end="${pb.totalPage}" var="n" step="1">
 <a href="/day20_1/findAllByPage?pageNum=${n}&currentPage=${pb.currentPage}">第${n}页</a>&nbsp;&nbsp;
 </c:forEach>


问题:如果页码比较多怎样处理?

可以限定页码数,例如:前5后4。

这样做,页面的判断条件比较多,可以使用自定义标签。

可以在自定义标签中通过java代码来解决判断操作。如果直接在页面上,使用<c:if>代码太乱


1人已赞


本文由Fun言网 – 乔布斯斯创作,转载请务必附上本文链接和出处,欢迎参与我们的付费投稿计划


你还没有登录,请先 登录注册!
文章评论0