Web核心练习之分页模块

分页查询分类:

逻辑分页(不常用):

逻辑上进行分页,实际并没有分页操作。
一次性把所有数据查询出来,但是在展示的时候只显示其中某一部分。

优点:只需要查询一次数据库,数据展示的速度比较快。

缺点:非常消耗内存,在数据量比较大的时候有内存溢出的隐患。

物理分页(推荐,常用)

在逻辑上进行分页,实际操作时也进行分页。
查询时就只查某一页的数据。无论数据库表中一共有多少条记录,一次只查其中一页的数据。

优点:占用的空间是稳定可预期的。不会产生内存溢出的问题。

缺点:每次查询都需要和数据库进行交互,实现的难度略高。

sql查询时就需要分页。

数据结构:

前台->后台

目标页码 currentPage(为了转换为当前页,所以也叫currentPage)

页面显示数量 rows\pageSize

后台->前台

当前页码 currentPage

页面显示数量 rows\pageSize

总页数 totalPage = Math.ceil(totalCount/rows)

总数据量 totalCount

数据列表 list

为了数据传递和操作方便,我们把上述5个数据封装到一个对象中,起名为PageBean。

逻辑

从list.jsp或者从index.jsp开始,给Servlet发送要查询哪一页的信息

        currentPage    rows

在Servlet中获取请求参数,把两个参数传给Service

在Service中,目的就是封装PageBean中的所有数据。

原则:缺什么补什么。
查询数据库:查询总数据量,查询数据列表
计算开始索引 = (currentPage - 1) * rows
4. 在Service中调用DAO方法把需要从数据库获取的数据得出来
5. 在DAO中实现数据库查询的两个方法
limit m,n
m: 开始索引
n: 查询的数据条数
6. 把PageBean返回到Servlet中,存入到request域,转发到list.jsp中
7. 在list.jsp中,使用EL+JSTL回显分页数据
分页条处理
1. 页码最好不要从1遍历到最后一页,自行处理一下开始和结束的页码
2. 分页条边界值处理
前台要做有效性校验
后台也要做有效性校验
在Service中进行校验
条件查询
在分页查询的基础上,额外获取查询条件进行sql的拼接。
如何动态生成sql?
使用一个恒等式把主体sql中的where关键字给确定下来,然后所有的额外条件只需要拼接and语句即可。
select * from user where 1=1
[and name like ?]
[and address like ?]
[and email like ?]
limit ?,?

猜你喜欢

转载自www.cnblogs.com/maomaodesu/p/12109725.html