相信大家在搭建后台的时候,经常会使用到分页功能,当然,目前有不少框架(如esayUI)都自带分页的实现,为了更好的理解分页原理,近期本人自己摸索了关于分页查询的一些心得。
归根结底,分页的核心还是在封装PageBean,并通过一定的算法对其进行判断,赋值
public class PageBeanimplements Serializable{ /** * */ private static final long serialVersionUID = 1L; private int currentPage; //当前第几页 ,请求传过来 private int pageCount; // 每页显示多少条数据 private int totalCount; //总记录数,查询数据获得 private int totalPage; //总页数, 通过 totalCount 和 pageCount计算获得 private int startIndex; //开始索引,与pageCount 组成 limit 条件 private List pageData; //分页显示的页数,如 1,2,3,4 private int start; private int end; public PageBean(int currentPage,int pageCount,int totalCount){ this.currentPage=currentPage; this.pageCount=pageCount; this.totalCount=totalCount; if(totalCount % pageCount==0){ this.totalPage = totalCount/ pageCount; }else{ this.totalPage= totalCount/pageCount+1; } this.startIndex = (currentPage-1)*pageCount; this.start=1; this.end=5; if(pageCount<=5){ this.end= this.totalPage; }else{ this.start=currentPage-2; this.end = currentPage+2; if(start<=0){ this.start=1; this.end=5; } if(this.end > this.totalPage){ this.end=totalPage; this.start=end-4; } } } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageCount() { return pageCount; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getStartIndex() { return startIndex; } public void setStartIndex(int startIndex) { this.startIndex = startIndex; } public List getPageData() { return pageData; } public void setPageData(List pageData) { this.pageData = pageData; } public int getStart() { return start; } public void setStart(int start) { this.start = start; } public int getEnd() { return end; } public void setEnd(int end) { this.end = end; } public static long getSerialversionuid() { return serialVersionUID; } }
Controller层
1 int currentPage = Integer.valueOf(request.getParameter("currentPage")); 2 3 int pageCount=7; 4 5 BlogTypeService blogType = new BlogTypeServiceImpl(); 6 7 PageBeanpage = blogType.page(currentPage, pageCount); 8 request.setAttribute("page", page); 9 request.getRequestDispatcher("/jsp/blogType.jsp").forward(request, response);
service层
public PageBeanpage(int currentPage,int pageCount) { int totalCount=blogType.getTotal(); PageBean pageBean = new PageBean<>(currentPage, pageCount, totalCount); int startIndex = pageBean.getStartIndex(); pageBean.setPageData(blogType.page(startIndex, pageCount)); return pageBean; }
dao层
public Listpage(int currentPage,int pageCount){ String sql = "select * from t_blogtype limit ?,?"; PageBean pageBean =null; Connection conn =null; PreparedStatement ps =null; ResultSet rs =null; BlogType blogType =null; try { conn =DBDao.connection(); ps=conn.prepareStatement(sql); ps.setInt(1, currentPage); ps.setInt(2, pageCount); rs=ps.executeQuery(); List list =new ArrayList (); while(rs.next()){ blogType = new BlogType(); blogType.setId(rs.getInt("id")); blogType.setTypeName(rs.getString("typeName")); blogType.setOrderNum(pageCount); list.add(blogType); } return list; } catch (Exception e) { e.printStackTrace(); } return null; } public int getTotal() { String sql ="select count(id) from t_blogtype"; Connection conn =null; PreparedStatement ps=null; ResultSet rs=null; int count=0; try{ conn= DBDao.connection(); ps=conn.prepareStatement(sql); rs=ps.executeQuery(); rs.next(); count=rs.getInt(1); }catch(Exception e){ e.printStackTrace(); } return count; }
因为本文主要在说分页查询,所以关于 数据库的连接就一并放到dao里了!
(其实本人是不知道将数据库的连接放在哪里。。。。嘻嘻)
jsp
1 2 共有${page.totalCount }个分类,共有${page.pageCount }页,当前为第${page.currentPage }页,每页显示${page.pageCount }条 3
选择 | 6序号 | 7博客类别 | 8博客排序 | 9操作 | 10 11 12|
---|---|---|---|---|---|
15 | ${page.id } | 16${page.typeName } | 17${page.orderNum } | 18修改|删除 | 1920 |
27 首页
28
29 if test="${page.currentPage==1 }">
30
31 if test="${page.currentPage == i}">
32 ${i}
33 if>
34 if test="${page.currentPage != i}">
35 ${i}
36 if>
37
38 下一页
39 if>
40
41 if test="${page.currentPage>1 && page.currentPage
42 上一页
43
44 if test="${page.currentPage == i}">
45 ${i}
46 if>
47 if test="${page.currentPage != i}">
48 ${i}
49 if>
50
51 下一页
52 if>
53
54 if test="${page.currentPage==page.totalPage }">
55 上一页
56
57 if test="${page.currentPage == i}">
58 ${i}
59 if>
60 if test="${page.currentPage != i}">
61 ${i}
62 if>
63
64
65 if>
66 尾页
67
68
69