分页查询的实现原理
2017-02-28 16:21
302 查看
1:接着上次写的图书管理系统:http://www.cnblogs.com/biehongli/p/6445803.html
这次新增了分页查询;
2:为什么会用到分页呢,因为列表内容太多了,所以使用分页进行显示。
分页的核心就是计算每页多少记录和总页数以及第几页。
3:首先先写如何计算每页多少记录和第几页,依旧在BookDao.java和BookDaoImpl.java中继续增加方法
在计算每页多少记录和第几页的后台核心代码如下所示:
//第二步书写sql语句
String sql="select * from book limit ?,? ";
ps=con.prepareStatement(sql);//第三步:预编译
//第几页需要设置好是页数减一乘以每页的记录数即是第多少页
ps.setInt(1, (page-1)*record);
ps.setInt(2, record);
4:首先先写如何计算总页数,依旧在BookDao.java和BookDaoImpl.java中继续增加方法
5:接下来直接在book.jsp进行代码的开发,完成分页功能,本页的都是核心,因为在book.jsp页面完成了如何操作上一页,下一页,跳转页数,以及完成了首页尾页的控制
演示效果如下所示:
还有很多需要完善的,所以先分享一下咯,继续努力咯!!!
这次新增了分页查询;
2:为什么会用到分页呢,因为列表内容太多了,所以使用分页进行显示。
分页的核心就是计算每页多少记录和总页数以及第几页。
3:首先先写如何计算每页多少记录和第几页,依旧在BookDao.java和BookDaoImpl.java中继续增加方法
在计算每页多少记录和第几页的后台核心代码如下所示:
//第二步书写sql语句
String sql="select * from book limit ?,? ";
ps=con.prepareStatement(sql);//第三步:预编译
//第几页需要设置好是页数减一乘以每页的记录数即是第多少页
ps.setInt(1, (page-1)*record);
ps.setInt(2, record);
/*** * 分页查询的方法 * @param page 第几页 * @param record 一页有多少记录 * @return */ public List<Book> bookPage(int page,int record);
@Override public List<Book> bookPage(int page, int record) { Connection con=null; PreparedStatement ps=null; ResultSet rs=null; try { con=BaseDao.getCon();//第一步连接数据库 //第二步书写sql语句 String sql="select * from book limit ?,? "; ps=con.prepareStatement(sql);//第三步:预编译 //第几页需要设置好是页数减一乘以每页的记录数即是第多少页 ps.setInt(1, (page-1)*record); ps.setInt(2, record); //第四步执行sql rs=ps.executeQuery(); List<Book> list=new ArrayList<Book>(); while(rs.next()){ Book book=new Book(); book.setBookid(rs.getInt("bookid")); book.setBookname(rs.getString("bookname")); book.setPrice(rs.getDouble("price")); book.setAuthor(rs.getString("author")); book.setPic(rs.getString("pic")); book.setPublish(rs.getString("publish")); list.add(book); } return list; } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally{ //关闭资源,避免出现异常 BaseDao.close(con, ps, rs); } return null; }
4:首先先写如何计算总页数,依旧在BookDao.java和BookDaoImpl.java中继续增加方法
/*** * 获取总页数 * @param record * @return */ public int getCount(int record);
@Override public int getCount(int record) { Connection con=null; PreparedStatement ps=null; ResultSet rs=null; //设置初始值为-1 int n=-1; try { con=BaseDao.getCon();//第一步连接数据库 //第二步书写sql语句 String sql="select count(*) from book "; ps=con.prepareStatement(sql);//第三步:预编译 //第四步执行sql rs=ps.executeQuery(); if(rs.next()){ //获取第一条记录,因为查询count(1)就一条记录,获取即可,即总记录数 n=rs.getInt(1); //将总记录数除以每页的总记录数然乎向上取整即可 n=(int)Math.ceil(1.0*n/record); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally{ //关闭资源,避免出现异常 BaseDao.close(con, ps, rs); } return n; }
5:接下来直接在book.jsp进行代码的开发,完成分页功能,本页的都是核心,因为在book.jsp页面完成了如何操作上一页,下一页,跳转页数,以及完成了首页尾页的控制
<%@page import="com.bie.dao.impl.BookDaoImpl"%> <%@page import="com.bie.dao.BookDao"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="java.util.List" %> <%@ page import="com.bie.po.Book" %> <%@ page import="com.bie.service.impl.BookServiceImpl" %> <%@ include file="head.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>图书处理页面</title> <style type="text/css"> h1{text-align:center;} </style> <script type="text/javascript"> function clickIt(){ var p2=document.getElementById("t2").value; location.href="book.jsp?p="+p2; } </script> </head> <body> <%-- <% //第一次使用的方法 Book book=new Book(); BookServiceImpl service=new BookServiceImpl(); List<Book> list=service.select(book); %> --%> <% Book book=new Book(); BookDao dao=new BookDaoImpl(); //2:获取从下面上一页下一页传来的参数p String p2=request.getParameter("p"); //1:设置好第一页开始和一页有五条记录 int p=1; int r=5; //5:获取到返回的总页数,将每页的总记录数传进去 int count=dao.getCount(r); //3:如果p2不为null且不为空,就转化为p if(p2!=null && !p2.equals("")){ p=Integer.parseInt(p2); } //4:如果页数为负的那么就赋值为首页 if(p<=0){ p=1; } //6:控制后面的页数,如果大于总页数,将最后一页赋值为尾页即可 if(p>=count){ p=count; } //7:调用分页的方法进行分页操作 List<Book> list=dao.bookPage(p, r); %> <h1>图书列表</h1> <a href="javascript: window.history.go(-1)">返回上一级</a> <table align="center" cellpadding="10" cellspacing="10"> <tr bgcolor="green"> <td>编号</td> <td>书名</td> <td>价格</td> <td>作者</td> <td>封皮</td> <td>出版社</td> </tr> <%-- <% for(Book b:list){ %> --%> <% String bg=""; for(int i=0;i<list.size();i++){ Book b=list.get(i); if(i%2==0) bg="pink"; else bg="yellow"; %> <tr bgcolor="<%=bg%>"> <td><%=b.getBookid() %></td> <td><a href="doInfo.jsp?bookid=<%=b.getBookid() %>"><%=b.getBookname() %></a></td> <td><%=b.getPrice() %></td> <td><%=b.getAuthor() %></td> <td><%=b.getPic() %></td> <td><%=b.getPublish() %></td> </tr> <% } %> </table> <div align="center"> 第<%=p %>/共<%=count %>页 <a href="book.jsp?p=0">首页</a> <a href="book.jsp?p=<%=p-1 %>">上一页</a> <a href="book.jsp?p=<%=p+1 %>">下一页</a> <a href="book.jsp?p=<%=count%>">尾页</a> <input type="text" size="2" id="t2"> <input type="button" value="go" onclick="clickIt()"/> </div> </body> </html>
演示效果如下所示:
还有很多需要完善的,所以先分享一下咯,继续努力咯!!!
相关文章推荐
- 实现Hibernate分页查询原理解读
- oracle rownum 原理及分页查询实现
- [置顶] oracle数据库分页查询原理与事例实现(五六种方法)
- 实现Hibernate分页查询原理解读
- 分页查询的实现原理
- 实现Hibernate分页查询原理解读
- Hibernate实现分页查询的原理分析
- 分页查询的实现原理
- Mybatis最入门---分页查询(拦截器分页原理及实现)
- Mybatis最入门---分页查询(拦截器分页原理及实现)
- 实现Hibernate分页查询原理解读
- Hibernate实现分页查询的原理分析
- 分页查询 oralce sqlserver mybatic实现原理
- Hibernate实现分页查询的原理分析
- Hibernate实现分页查询的原理分析
- 实现Hibernate分页查询原理解读
- Hibernate实现分页查询的原理分析
- 实现在Hibernate中的分页查询原理解读
- 实现Hibernate分页查询原理解读
- 分页查询的实现原理