分页查询的实现原理

简介: 1:接着上次写的图书管理系统:http://www.cnblogs.com/biehongli/p/6445803.html 这次新增了分页查询;  2:为什么会用到分页呢,因为列表内容太多了,所以使用分页进行显示。 分页的核心就是计算每页多少记录和总页数以及第几页。 3:首先先写如何计算每页多少记录和第几页,依旧在BookDao.java和BookDaoImpl.java中继续增加
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);

1 /***
2      * 分页查询的方法
3      * @param page 第几页
4      * @param record 一页有多少记录
5      * @return
6      */
7     public List<Book> bookPage(int page,int record);
 1 @Override
 2     public List<Book> bookPage(int page, int record) {
 3         Connection con=null;
 4         PreparedStatement ps=null;
 5         ResultSet rs=null;
 6         try {
 7             con=BaseDao.getCon();//第一步连接数据库
 8             //第二步书写sql语句
 9             String sql="select * from book limit ?,? ";
10             ps=con.prepareStatement(sql);//第三步:预编译
11             //第几页需要设置好是页数减一乘以每页的记录数即是第多少页
12             ps.setInt(1, (page-1)*record);
13             ps.setInt(2, record);
14             
15             //第四步执行sql
16             rs=ps.executeQuery();
17             List<Book> list=new ArrayList<Book>();
18             while(rs.next()){
19                 Book book=new Book();
20                 book.setBookid(rs.getInt("bookid"));
21                 book.setBookname(rs.getString("bookname"));
22                 book.setPrice(rs.getDouble("price"));
23                 book.setAuthor(rs.getString("author"));
24                 book.setPic(rs.getString("pic"));
25                 book.setPublish(rs.getString("publish"));
26                 
27                 list.add(book);
28             }
29             return list;
30         } catch (ClassNotFoundException e) {
31             e.printStackTrace();
32         } catch (SQLException e) {
33             e.printStackTrace();
34         }finally{
35             //关闭资源,避免出现异常
36             BaseDao.close(con, ps, rs);
37         }
38         
39         return null;
40     }

4:首先先写如何计算总页数,依旧在BookDao.java和BookDaoImpl.java中继续增加方法

1 /***
2      * 获取总页数
3      * @param record
4      * @return
5      */
6     public int getCount(int record);
 1 @Override
 2     public int getCount(int record) {
 3         Connection con=null;
 4         PreparedStatement ps=null;
 5         ResultSet rs=null;
 6         //设置初始值为-1
 7         int n=-1;
 8         try {
 9             con=BaseDao.getCon();//第一步连接数据库
10             //第二步书写sql语句
11             String sql="select count(*) from book ";
12             ps=con.prepareStatement(sql);//第三步:预编译
13             
14             //第四步执行sql
15             rs=ps.executeQuery();
16             if(rs.next()){
17                 //获取第一条记录,因为查询count(1)就一条记录,获取即可,即总记录数
18                 n=rs.getInt(1);
19                 //将总记录数除以每页的总记录数然乎向上取整即可
20                 n=(int)Math.ceil(1.0*n/record);
21             }
22             
23         } catch (ClassNotFoundException e) {
24             e.printStackTrace();
25         } catch (SQLException e) {
26             e.printStackTrace();
27         }finally{
28             //关闭资源,避免出现异常
29             BaseDao.close(con, ps, rs);
30         }
31         
32         return n;
33     }

5:接下来直接在book.jsp进行代码的开发,完成分页功能,本页的都是核心,因为在book.jsp页面完成了如何操作上一页,下一页,跳转页数,以及完成了首页尾页的控制

  1 <%@page import="com.bie.dao.impl.BookDaoImpl"%>
  2 <%@page import="com.bie.dao.BookDao"%>
  3 <%@ page language="java" contentType="text/html; charset=UTF-8"
  4     pageEncoding="UTF-8" %>
  5 <%@ page import="java.util.List" %>
  6 <%@ page import="com.bie.po.Book" %>
  7 <%@ page import="com.bie.service.impl.BookServiceImpl" %>
  8   
  9 <%@ include file="head.jsp" %>  
 10 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 11 <html>
 12 <head>
 13 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 14 <title>图书处理页面</title>
 15 <style type="text/css">
 16 h1{text-align:center;}
 17 </style>
 18 
 19 <script type="text/javascript">
 20     function clickIt(){
 21         var p2=document.getElementById("t2").value;
 22         location.href="book.jsp?p="+p2;
 23     }
 24 </script>
 25 </head>
 26 <body>
 27 <%-- <%
 28     //第一次使用的方法
 29     Book book=new Book();
 30     BookServiceImpl service=new BookServiceImpl();
 31     List<Book> list=service.select(book);
 32 %> --%>
 33 
 34 <%
 35     Book book=new Book();
 36     BookDao dao=new BookDaoImpl();
 37     //2:获取从下面上一页下一页传来的参数p
 38     String p2=request.getParameter("p");
 39     
 40     //1:设置好第一页开始和一页有五条记录
 41     int p=1;
 42     int r=5;
 43     //5:获取到返回的总页数,将每页的总记录数传进去
 44     int count=dao.getCount(r);
 45     
 46     //3:如果p2不为null且不为空,就转化为p
 47     if(p2!=null && !p2.equals("")){
 48         p=Integer.parseInt(p2);
 49     }
 50     //4:如果页数为负的那么就赋值为首页
 51     if(p<=0){
 52         p=1;
 53     }
 54     
 55     //6:控制后面的页数,如果大于总页数,将最后一页赋值为尾页即可
 56     if(p>=count){
 57         p=count;
 58     }
 59     
 60     //7:调用分页的方法进行分页操作
 61     List<Book> list=dao.bookPage(p, r);
 62     
 63 %>
 64 <h1>图书列表</h1>
 65 <a href="javascript: window.history.go(-1)">返回上一级</a>
 66 <table align="center" cellpadding="10" cellspacing="10">
 67     
 68     <tr bgcolor="green">
 69         <td>编号</td>
 70         <td>书名</td>
 71         <td>价格</td>
 72         <td>作者</td>
 73         <td>封皮</td>
 74         <td>出版社</td>
 75     </tr>
 76         <%-- <%
 77             for(Book b:list){
 78         %> --%>
 79         <%
 80             String bg="";
 81             for(int i=0;i<list.size();i++){
 82                 Book b=list.get(i);
 83                 if(i%2==0)
 84                     bg="pink";
 85                 else
 86                     bg="yellow";
 87         %>
 88     <tr bgcolor="<%=bg%>">
 89             <td><%=b.getBookid() %></td>
 90             <td><a href="doInfo.jsp?bookid=<%=b.getBookid() %>"><%=b.getBookname() %></a></td>
 91             <td><%=b.getPrice() %></td>
 92             <td><%=b.getAuthor() %></td>
 93             <td><%=b.getPic() %></td>
 94             <td><%=b.getPublish() %></td>
 95     </tr>
 96         <%        
 97             }
 98         %>
 99 </table>
100 <div align="center">
101     第<%=p %>/共<%=count %>102     <a href="book.jsp?p=0">首页</a>
103     <a href="book.jsp?p=<%=p-1 %>">上一页</a>
104     <a href="book.jsp?p=<%=p+1 %>">下一页</a>
105     <a href="book.jsp?p=<%=count%>">尾页</a>
106     <input type="text" size="2" id="t2">
107     <input type="button" value="go" onclick="clickIt()"/>
108 </div>
109 </body>
110 </html>

演示效果如下所示:

还有很多需要完善的,所以先分享一下咯,继续努力咯!!!

 

目录
相关文章
|
SQL 分布式计算 HIVE
基于Docker搭建大数据集群(六)Hive搭建
基于Docker搭建大数据集群(六)Hive搭建
|
数据可视化 数据挖掘 开发工具
【办公自动化】用Python批量从上市公司年报中获取主要业务信息
【办公自动化】用Python批量从上市公司年报中获取主要业务信息
1513 0
|
5月前
|
存储 人工智能 自然语言处理
大模型备案攻略—2025全网最新最详细解读版
随着AI技术的发展,大模型备案成为行业热点。本文详解备案所需具体条件与注意事项,涵盖模型功能、适用场景、研制情况、安全评估及备案材料等核心内容,帮助企业全面了解备案流程,规避合规风险,顺利推进产品上线。
|
11月前
|
人工智能 资源调度 API
AnythingLLM:34K Star!一键上传文件轻松打造个人知识库,构建只属于你的AI助手,附详细部署教程
AnythingLLM 是一个全栈应用程序,能够将文档、资源转换为上下文,支持多种大语言模型和向量数据库,提供智能聊天功能。
7781 76
|
9月前
|
运维 Cloud Native Serverless
仅3步!即刻拥有 QwQ-32B,性能比肩全球最强开源模型
本文详细介绍如何将 QwQ-32B 开源模型部署到函数计算 FC(Function Compute),并通过云原生应用开发平台 CAP(Cloud Application Platform)实现 Ollama 和 Open WebUI 两个 FC 函数的部署。
|
存储 人工智能 自然语言处理
边缘智能的新时代:端侧大模型的研究进展综述
【10月更文挑战第9天】随着人工智能的发展,大语言模型在自然语言处理领域取得突破,但在资源受限的边缘设备上部署仍面临挑战。论文《On-Device Language Models: A Comprehensive Review》全面综述了端侧大模型的研究进展,探讨了高效模型架构、压缩技术、硬件加速及边缘-云协作等解决方案,展示了其在实时、个性化体验方面的潜力,并指出了未来的研究方向和挑战。
1196 2
|
10月前
|
存储 人工智能 运维
阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台
本文详细评测了阿里云操作系统控制台,作为一款集运维管理、智能助手和系统诊断于一体的工具,它为企业提供了高效管理云资源的解决方案。文章涵盖登录与服务开通、系统管理与实例纳管、组件管理与扩展功能、系统诊断与问题排查以及实时热点分析与性能优化等内容。通过实际操作展示,该平台显著提升了运维效率,并借助AI智能助手简化了复杂操作。建议进一步完善组件库并增强第三方兼容性,以满足更多高级运维需求。
696 2
|
10月前
|
设计模式 XML Java
设计模式觉醒系列(03)创建型模式的5个设计模式 | 一口气讲全讲透
本文详细介绍了设计模式中的创建型模式,包括建造者模式、原型模式、单例模式、工厂方法模式和抽象工厂模式。创建型模式关注对象的创建过程,隐藏了创建细节,以提高代码的可维护性和可扩展性。通过具体的实战demo和应用场景分析,展示了每种模式的特点和优势。例如,建造者模式适用于复杂对象的分步骤构建;原型模式通过复制对象实现高效复用;单例模式确保全局唯一实例;工厂方法模式和抽象工厂模式则提供了灵活的对象创建机制,支持多类型产品族的生产。这些模式在实际开发中能够简化客户端代码,提升系统灵活性和复用性。
|
12月前
|
定位技术 数据安全/隐私保护
合适的HTTP代理IP关键考虑因素与实用建议
随着互联网发展,使用HTTP代理IP的需求日益增加。选择优质HTTP代理IP时需注意:1. 速度和稳定性;2. 用户信息保护;3. 地域性;4. 带宽上限;5. 支持的协议;6. 客户支持;7. 用户评价和信誉;8. 价格和性价比。确保选择可靠的代理服务,满足业务需求。
292 18
|
机器学习/深度学习 人工智能
Leffa:Meta AI 开源精确控制人物外观和姿势的图像生成框架,在生成穿着的同时保持人物特征
Leffa 是 Meta 开源的图像生成框架,通过引入流场学习在注意力机制中精确控制人物的外观和姿势。该框架不增加额外参数和推理成本,适用于多种扩散模型,展现了良好的模型无关性和泛化能力。
733 11
Leffa:Meta AI 开源精确控制人物外观和姿势的图像生成框架,在生成穿着的同时保持人物特征