@目录
项目案例: mysql + commons-dbutils+itcast-tools+BaseServlet + 分页+JSP+JSTL+EL+MVC模式
如上所示,就是分页 ,不用多说了
子模块功能的问题分析 和 解决方案
@总功能分析 常规JDBC中,点击查询或输入条件查询,在页面中可显示查询出的所有记录,有多少记录就显示多少。在这种项目的基础上增加分页功能 。 @分页功能的宗旨 是无论什么样的查询,显示出的记录都是当前页的记录 。 所以,我们必须得向系统说明我们当前是要显示第几页的数据 。 自然,需要一个PageBean类
public class PageBean<T> { private int pageCode ;//当前页码 // private int totalPage ;//总页数,总页数应该由计算获取 private int totalRecord;//总记录数 private int pageSize;//每页记录数,这是参数是定做这个软件的甲方提出来的,在Servlet中直接定义为10了 private List<T> beanList;//当前页的记录集合,方便整页记录的转移 private String url ;//Url后的条件,条件查询设置的 }
这个PageBean类中封装了当前页、总记录数、当前页所有记录的集合等,系统通过当前页码这个参数返回pageSize条记录放在beanList集合中返回显示。
@子模块功能1 中首页的pageCode是1,尾页的pageCode是totalPage,上一页和下一页分别是pageCode-1 和pageCode+1 。
@子模块功能2 先来分析一个功能 : 当前页在页码列表中是第几个位置 ?
从上述两张图片中,点击1页码,当前页处于列表的第1个位置,点击2页码,当前页处于列表的第2个位置,..........,点击6页码,当前页处于列表的第6个位置,但是当点击7页码时,当前页还是处于列表的第6个位置 。 也就是说,假如每次一行只能显示10个页码,1~6页码的当前页的位置还是1~6,列表从页码1~页码10。 但是7~10页码的当前页的位置始终位于页码列表的第6个位置 ,列表从【页码2~页码11】~【页码X~页码totalPage】。其实非常好解决 ,列表头尾的判定 还是利用pageCode , begin = pageCode - 5 , end = pageCode + 4 。
@解决
- 如果 totalPage <= 10(列表长度),那么 begin = 1,end = totalPage ;
- 使用公式计算;begin = pc-5 , end = pc + 4;
- 头溢出:当 begin < 1 时 , 让 begin = 1 ;
- 尾溢出:当 end > totalPage 时 , 让 end = totalPage
有条件查和无条件查询的影响 和 解决方案
@产生一个问题 分页使得有条件查询产生一个严重问题 , 通过条件查询出40条记录,分4页显示,只有第一页是该条件下的记录,其余3页都是不带条件的记录 。所以我们必须告诉系统我们的条件是什么,每一页都要带着条件去查询和返回 。
@解决 在pageBean中设置url参数 , 这个参数将会携带这条件传递到Servlet中 。
项目案例(mvc+jdbc+c3p0+BaseServlet+mysql+JSP+EL+JSTL)
@使用 mysql数据库,c3p0数据库连接池,
采用commons-dbutils组件,封装好的JdbcUtils工具类和TxQueryRunner工具类辅助JDBC , (学习地址 : http://www.cnblogs.com/zyuqiang/p/7218083.html)
BaseServlet辅助类
JSP+EL+JSTL
@数据库
1 CREATE TABLE t_customer ( 2 username VARCHAR(50) DEFAULT NULL, 3 age INT(11) DEFAULT NULL, 4 balance DOUBLE(20,5) DEFAULT NULL 5 );