分页我们要弄清楚分页所需要的内容
分页的初步分析
我们需要要有五个参数才能完成分页:
pageNo 当前页码(当前你在第几页)
pageTotal 总页码数(如果你要分为30页就是30)
pageTotalCount 总条目数(总共查询出多少条数据)
pageSize 每页显示的数目(每一页你要展示几条数据)
items 当前页码显示的数据集合(如果是为学生分页那么获取的就是List<student>,)
只要这几个参数齐全就可以开展了
首先我们建立一个
对应的JavaBean Page
package Pro; import java.util.List; public class Page<T> { public static final Integer PAGE_SIZE = 4; //当前页码 private Integer pageNo; //总页码 private Integer pageTotal; //当前野显示的数量 private Integer pageSize = PAGE_SIZE; //查询的总记录数 private Integer pageToalCount; //当前页数据 private List<T> items; public Page() { } public static Integer getPageSize() { return PAGE_SIZE; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getPageToalCount() { return pageToalCount; } public void setPageToalCount(Integer pageToalCount) { this.pageToalCount = pageToalCount; } public List<T> getItems() { return items; } public void setItems(List<T> items) { this.items = items; } public Integer getPageNo() { return pageNo; } public Integer getPageTotal() { return pageTotal; } public void setPageTotal(Integer pageTotal) { this.pageTotal = pageTotal; } /** * 设置第一页和最后页的限制,第一页再点击上一页也是第一页 最后一页 再点击下一页也是最后页 * @param pageNo */ public void setPageNo(Integer pageNo) { if(pageNo < 1){ pageNo = 1; } if(pageNo > pageTotal){ pageNo = pageTotal; } } @Override public String toString() { return "Page{" + "pageNo=" + pageNo + ", pageTotal=" + pageTotal + ", pageSize=" + pageSize + ", pageToalCount=" + pageToalCount + ", items=" + items + '}'; } }
比如我们要对Book进行分页展示
那么就对最初的BookDao中添加方法
/** * 查询所有记录条目数 * @return */ public Integer queryForPageTotalCount(); /** * 查询界面展示的信息集合 * @param begin 开始位置 * @param pageSize 每页显示的记录数 * @return */ public List<Book> queryForPageItems(int begin,int pageSize);
BookDaoImpl中实现这两个方法
@Override public Integer queryForPageTotalCount() { String sql = "select count(*) from t_book"; Number count = (Number) queryForStingValue(sql); return count.intValue(); } @Override public List<Book> queryForPageItems(int begin, int pageSize) { String sql = "select `id`,`name`,`price`,`author`,`sales`,`stock`,`img_path` from t_book limit ?,?"; return queryForList(Book.class,sql,begin,pageSize); }
然后再BookService中建立Page的实现
@Override public Page<Book> pages(int pageNo, int pageSize) { Page<Book> page = new Page<Book>(); //设置当前页码 page.setPageNo(pageNo); //设置每页显示的数据条目 page.setPageSize(pageSize); //获取总条目数 Integer pageTotalCount = bookDao.queryForPageTotalCount(); //设置总条目数 page.setPageToalCount(pageTotalCount); //获取总页码 总页码等于总条目数 / 每页显示的条目 pageTotalCount/pageSize Integer pageTotal = pageTotalCount / pageSize; if(pageTotalCount * pageSize > 1){ pageTotal += 1; } page.setPageTotal(pageTotal); // 开始的条目数 Integer begin = (page.getPageNo() -1) * pageSize; List<Book> items = bookDao.queryForPageItems(begin,pageSize); page.setItems(items); return page; }
然后是BookServlet
protected void page(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException { int pageNo = WebUtil.parseInt(req.getParameter("pageNo"),1); int pageSize = WebUtil.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE); Page<Book> page = bookService.pages(pageNo,pageSize); req.setAttribute("page",page); req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp); }
manager_menu.jsp 中【图书管理】请求地址的修改:
.