**
JavaWeb分页查询思路剖析
**案例分析:
前端-->后台:
1. 当前端需要对某项数据进行条件查询时, 需要给出查询条件, 故得出第一个参数: "查询条件";
2. 当查询结果过多,无法全部显示, 或全部显示页面不够清晰友好时, 需要对查询结果进行分页显示, 故得出第二个参数: "目标页页数":
目标页页数: 初始页数为1, 用户选择响应按钮时, 即确认出新的"目标页页数"";
3. 当需要按某种顺序查看查询结果时, 需要将查询结果按条件排序,故得出第三个参数: "排序条件";
后台-->前端:
1. 当前端需要向客户展示信息时, 需要拿到显示的内容,故得第一个参数: "当前页查询结果集合";
2. 同时我们需要在前端显示分页条, 以京东分页条为例分析:
a. 上一页/ 下一页/ 其它目标页页数, 都可由当前页数或直接选择得出, 故得出第二个参数: "当前页数";
b. 总页数需要由: 查询结果总数 和 每页显示结果数 得出, 故得出第三个参数: "查询结果总数", 第四个参数: "每页显示条数";
c. 当总页数大于一定值时, 显示出所有页数的对应选择按钮, 影响展示效果和用户体验, 故仅显示某些页面按钮即可:
如:
展示 首页/ 尾页 按钮;
展示 上一页/ 下一页 按钮;
展示 当前页前几页/ 当前页后几页 按钮;
展示 页面跳转的输入框/ 确认跳转按钮;
因而得出第五个参数: "之前可选页数", 第六个参数: "之后可选页数";
根据分析得出:
前端-->后台 参数:
1. 查询条件;
2. 目标页页数;
3. 排序条件;
后台-->前端 参数:
1. 当前页查询结果集合;
2. 当前页数;
3. 查询结果总数; (所有查询条件的结果总数)
4. 每页显示条数;
5. 之前可选页数;
6. 之后可选页数;
编程思想:
后台业务逻辑思路:
1.每页显示条数:一般根据用户体验/ 排版要求等确定, 故直接在后台给出(或配置文件导入);
2.目标页查询结果集合: 根据查询条件/ 当前页数/ 排序条件 及每页显示条数, 可以得到sql语句的 “伪代码” :
“select * from 数据库表 where 查询条件 sort by 排序条件 limit 起始位置,每页显示条数;” ;
3. 当前页数: 即前台传递给后台的目标页数, 因前台页面不直接通信, 故回传给前台即可;
4. 查询结果总数: 根据:查询条件,可得到sql语句的 “伪代码” :
“select count(*) from 数据库表 where 查询条件;” ;
5. 之前可选页数: 根据总页数/ 当前页数/ "前m后n"展示效果的 m/ n数值得出;
6. 之后可选页数: 同上(5);
整体架构:
Web分页查询功能实现涉及:前端页面/ 后台业务逻辑处理/ 数据库查询/ 查询结果回传等, 故基于MVC模式思想 并采用"经典三层体系架构":表示层/ 业务逻辑层/ 数据访问层;
基本思维:
1. 面向对象:
a. 单个查询结果是一个整体数据集, 故封装为实体类对象, 如商品对象/ 联系人信息对象/ 学生信息对象等;
b. 后端传递给前端的所有涉及分页查询数据, 可抽象为一个具有实体类性质的工具类, 并加入简单业务逻辑方法: 如计算:总页数/ 排序起始位置数 等;
2. 代码复用:
a. 代码复用的第一个体现就是 三层体系架构, 不再赘述;
b. 工具类的适当使用:
i. 数据库相关代码, 如: 注册/ 配置/ 流的关闭/连接池使用等, 封装成工具类, 使用时仅创建对象(静态方法可省略此步), 编写sql语句和提交参数即可;
ii. 复用性较高/ 代码量较大的其它业务逻辑, 封装成工具类, 使用时传入参数得到结果集即可, 如本例中: "根据总页数/ 当前页数/ “前m后n"展示效果的 m/ n数值得出:之前和之后可选页数”;
注意: 这里的复用性高一定程度指的是职业生涯和公司所有项目中的复用, 而不仅是指当前项目;