Java--mysql实现分页查询--分页显示
  当数据库中数据条数过多时,一个页面就不能显示,这是要设置分页查询,首先要使用的是数据库sql语句的limit条件实现分组查询
sql语句大概形式为:
	  select * from table limit 开始索引,显示条数
  用该语句就会实现分块查询,并且每页显示固定条数。
  (由于limit是mysql特有的,如果是Oracle数据库的话就需要通过rownum来限制比如:select * from table where rownum >=开始索引。如果是sql sever数据库的话可以用到top关键字,如取m到n条数据:select top (n-m+1) id from table where id not in (select top m-1 id from table))
首先要实现后台分页,我们需要知道它有多少页,每页有多少行,这就需要知道一共多少行,调用sql语句时还需要知道每一页的开始索引,开始索引是根据当前页数算出来的,所以还需要知道当前页数,查询后会返回一个列表存储当前页数据。将这些属性及获取设置的方法封装成一个类就有了下面的page类:
 public class Page<T> {
     private List<T> data;//数据列表
     private int pagenum;//当前页数
     private int pagesize;//当前页显示条数
     private int rows;//总行数
     public Page(int rows,int pagenum, int pagesize) {
         super();
         data=new ArrayList<>();
         this.rows=rows;
         this.setPagesize(pagesize);
         this.setPagenum(pagenum);
     }
     public Page() {
         super();
     }
     public int getPagenum() {
         return pagenum;
     }
     public void setPagenum(int pagenum) {
         if(pagenum>getTotalpage())
         {
             this.pagenum=getTotalpage();
         }
         else {
             this.pagenum = pagenum;
         }
         if(pagenum<1)
         {
             this.pagenum=1;
         }
     }
     public int getPagesize() {
         return pagesize;
     }
     public void setPagesize(int pagesize) {
         this.pagesize = pagesize;
     }
     public int getTotalpage() {
         //计算总页数
         if(rows%pagesize==0)
         {
             return rows/pagesize;
         }
         else {
             return rows/pagesize+1;
         }
     }
     public int getRows() {
         return rows;
     }
     public void setRows(int rows) {
         this.rows = rows;
     }
     public int getIndexnum() {
         //获取索引值
         return pagesize*(pagenum-1);
     }
     public List<T> getData() {
         return data;
     }
     public void setData(List<T> data) {
         this.data = data;
     }
 }
Page类
初始化时我们只需要获得数据总条数,页数及每页显示条数。数据总条数可以用sql语句select count(*)from table 获得。每次查询时只需要传入当前页数就可以了。将每次查询后的page对象传入jsp前台页面,并以一个div来显示
<div>
<a href="/stuent8.11/stuServlet?pagenum=1">首页</a>
<a href="/stuent8.11/stuServlet?pagenum=${apage.pagenum-1 }">上一页</a>
<c:choose>
<c:when test="${apage.totalpage<=5 }">
<c:set var="begin" value="1"></c:set>
<c:set var="end" value="${apage.totalpage }"></c:set>
</c:when>
<c:when test="${apage.totalpage>5 }">
<c:set var="begin" value="1"></c:set>
<c:set var="end" value="5"></c:set>
<c:if test="${apage.pagenum>3 }">
<c:set var="begin" value="${apage.pagenum-2 }"></c:set>
<c:set var="end" value="${apage.pagenum+2 }"></c:set>
</c:if>
<c:if test="${end>apage.totalpage }">
<c:set var="begin" value="${apage.totalpage-4 }"></c:set>
<c:set var="end" value="${apage.totalpage }"></c:set>
</c:if>
</c:when>
</c:choose>
<c:forEach begin="${begin }" end="${end }" step="1" var="num">
<c:if test="${apage.pagenum==num }">
[${num }]
</c:if>
<c:if test="${apage.pagenum!=num }">
<a href="/stuent8.11/stuServlet?pagenum=${num }">${num }</a>
</c:if>
</c:forEach>
<a href="/stuent8.11/stuServlet?pagenum=${apage.pagenum+1 }">下一页</a>
<a href="/stuent8.11/stuServlet?pagenum=${apage.totalpage }">末页</a>
</div>
显示div
其中的一个choose是用于规定页面显示的最大页数,这里是5页,就是说当点到第4页时,第1页就会消失,出现第6页。
Java--mysql实现分页查询--分页显示的更多相关文章
- MySQL 多表查询分页
		
SELECT v.*, vt.id vid, vt.vote_id, vt. option, vt.poll FROM vote v JOIN vote_option vt ON v.id = vt. ...
 - java mysql prepareStatement模糊查询like使用注意
		
今天在使用mysql 的like语句是,发现prepareStatement的like语句和一般的=写法有一样. 当要使用prepareStatement的like查询时,按照一般写法,都会写成: S ...
 - PageHelper实现分页查询
		
PageHelper是基于拦截器实现的myBatis分页插件 PageHelper的Github主页 : https://github.com/pagehelper/Mybatis-PageHelpe ...
 - 【CoreData】分页查询和模糊查询
		
在CoreData实际使用中,分页查询和模糊查询是必不可少的,接下来演示一下: 首先 // 1.创建模型文件 (相当于一个数据库里的表) // New File ———— CoreData ———— ...
 - Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
		
HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...
 - MyBatisPlus分页查询,删除操作
		
分页查询 分页查询在网页使用十分之多 原始的limit进行分页 pageHelper第三方插件 3. MP内置的分页插件 导入配置 如何使用,官网的代码如下 //分页插件 @Bean public P ...
 - java mysql 数据类型对照
		
java mysql 数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang. ...
 - Java MySQL数据类型对照
		
Java MySQL数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 varchar L+N VARCHAR java.lang.S ...
 - 【转】Java MySQL数据类型对照
		
Java MySQL数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.S ...
 
随机推荐
- redis的Hash类型以及其操作
			
hashes类型 hashes类型及操作Redis hash是一个string类型的field和value的映射表.它的添加.删除操作都是0(1)(平均).hash特别适合用于存储对象.相较于将对象的 ...
 - L149
			
Whenever I began to clean the house, my routine is to turn on my husband's PS3 and play my music fol ...
 - SpringMVC札集(03)——基于注解的SpringMVC入门完整详细示例
			
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
 - ffmpeg+EasyDSS流媒体服务器实现稳定的rtmp推流直播
			
本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/74783269 需求 在做EasyDSS开发时,总 ...
 - 利用层序遍历(含空节点)和中序遍历重建二叉树 python
			
给定一颗二叉树的层序遍历(不含None的形式)和中序遍历序列,利用两个序列完成对二叉树的重建. 还是通过一个例子来说明整个过程,下图所示的二叉树,层序遍历结果为[a,b,c,d,e],中序遍历结果为[ ...
 - C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档
			
前言 本文将使用一个基于开源项目HslCommunication创建的OPC UA网关,方便通过配置创建一个OPC UA的网关中心.具体的操作及支持的设备信息项目参照下面: 开源项目HslCommun ...
 - Objective C - 1 - 实现一个MessageBox.Show
			
@interface K3ViewController : UIViewController<UIAlertViewDelegate> @end #import "K3ViewC ...
 - css3公共样式
			
温馨提示:一下css封装,建议按需使用,否则会造成很大的代码冗余,且很多样式会造成不符合预期的效果,建议合理使用 <a href="https://meyerweb.com/eric/ ...
 - 启动和连接MySQL服务
			
1.服务端启动 1.查看MySQL状态 sudo /etc/init.d/mysql status sudo /etc/init.d/mysql start | stop | restart sudo ...
 - 【Python爬虫学习笔记(3)】Beautiful Soup库相关知识点总结
			
1. Beautiful Soup简介 Beautiful Soup是将数据从HTML和XML文件中解析出来的一个python库,它能够提供一种符合习惯的方法去遍历搜索和修改解析树,这将大大减 ...