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 ...
随机推荐
- Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory 解决办法
当你使用的Gradle版本是2.4以上,Android插件版本是1.3.0以上的时候就会出现这个问题,这时候你只需将android-maven-gradle-plugin插件版本改为classpath ...
- 不用storyboard,用xib开发
1. 新建一个Single View Application项目, 删除自动生成的.storyboard文件和ViewController文件 2. 新建一个UIViewController的子类,命 ...
- Week11《java程序设计》作业总结
Week11<java程序设计>作业总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 答: 2. 书面作业 本次PTA作业题集多线程 1. 源代码 ...
- APUE学习笔记——6 系统数据文件与信息
1.用户口令:/etc/passwd文件 该文件中包含下列结构体信息.其中,当下主修熊passwd不再这里显示,是使用了一个占位符. struct passwd { char * pw_name; / ...
- FCT test device
- ASP.NET MVC3关于生成纯静态后如何不再走路由直接访问静态页面--收藏没测
要解决这个问题,我们需要先了解ASP.NET应用程序的生命周期,先看下面作者整理的一张图片: 从图中我们可以清楚的看到:通用IIS访问应用程序时,每次的单个页面URL访问时,都会先经过HttpAppl ...
- 《Drools7.0.0.Final规则引擎教程》第4章 4.6 结果条件
结果条件 在Java中,如果有重复的代码我们会考虑进行重构,抽取公共方法或继承父类,以减少相同的代码在多处出现,达到代码的最优管理和不必要的麻烦.Drools同样提供了类似的功能.下面我们以实例来逐步 ...
- React-Native进阶_3.触摸高亮显示TouchableHighlight
在安卓原生ListView 点击 其中一个子视图时,会有高亮效果,这个效果在ReactNative 中通过TouchableHighlight 实现,具体使用如下 4.触摸高亮显示 Touchabl ...
- EasyCMS在幼儿园视频直播项目实战中以redis操作池的方式应对高并发的redis操作问题
在之前的博客< EasyDarwin幼教云视频平台在幼教平台领域大放异彩!>中我们也介绍到,EasyCMS+EasyDarwin+redis形成的EasyDarwin云平台方案,在幼教平台 ...
- 修改程序版本工具(ResHacker)使用说明20140902
有时候我们需要自己修改dll版本号,那么ResHacker工具可以帮我们在不需要开发帮助下可以自己修改版本号: 工具:直接复制出来即可 1.双击打开工具 2.将dll文件或者exe文件拖拽进来,或者[ ...