一个用于分页的page类
今天周一,趁工作轻松,自己就写了一个基于MySQl数据库的分页查询,做分页,最主要的是以下几点:
一:写sql语句:比如查询某张数据表的数据,sql语句为:select * from table limit 0,10
焦点就是limit这个限制条件,它的功能是:从0开始查询10条数据,表示你要在你的显示页面上显示10条数据,就是说你数据库表里面有15条,那只能显示10条,剩余5条数据
只能在下一页中显示。
同时需要查询数据库表中的数据总数:select count(*) from table , 用于获取数据的总页数。详细的介绍在代码中有解析。
二:要有一个类用来专门处理分页功能:Pages.java;这个不多说,直接上代码,在代码中有详细的注释:
- package com.utis.util;
- import java.util.List;
- public class Page<T> {
- private int pageSize =10; //每页显示条数
- private int totalCount; //总条数
- private int start; //开始条数
- private int pageNo;//当前页
- private int totalPages; //总页数
- private List<T> pageList;//数据
- public Page(int totalCount){
- this.totalCount = totalCount;
- }
- /**
- * ��ȡ��ǰ获取��下一条
- */
- public int getCurrentPageNo(){
- return start / pageSize + 1;
- }
- /**
- * �Ƿ�����是否有下一条
- * @return
- */
- public boolean getHasNextPage(){
- return getCurrentPageNo() < totalPages;
- }
- /**
- * �Ƿ�����当前页是否大于1
- * @return
- */
- public boolean getHasPavPage(){
- return getCurrentPageNo() > 1;
- }
- /**
- * ��ȡ��获取中页数��
- * @return
- */
- public int getTotalPages() {
- totalPages = totalCount / pageSize;
- if(totalCount % pageSize != 0){
- totalPages++;
- }
- return totalPages;
- }
- /**
- * ��õ�设置当前页����ʼ��的开始条数
- * @param pageNo ��ǰ页数��
- * @return
- */
- public int getStart(int pageNo){
- if(pageNo < 1){
- pageNo = 1;
- }
- else if(getTotalPages()>0&&pageNo > getTotalPages()){
- pageNo = getTotalPages();
- }
- start = (pageNo-1) * pageSize;
- return start;
- }
- //get and set
- public int getPageSize() {
- return pageSize;
- }
- public void setPageSize(int pageSize) {
- this.pageSize = pageSize;
- }
- public int getTotalCount() {
- return totalCount;
- }
- public void setTotalCount(int totalCount) {
- this.totalCount = totalCount;
- }
- public void setStart(int start) {
- this.start = start;
- }
- public List<T> getPageList() {
- return pageList;
- }
- public void setPageList(List<T> pageList) {
- this.pageList = pageList;
- }
- public void setTotalPages(int totalPages) {
- this.totalPages = totalPages;
- }
- public int getPageNo() {
- return pageNo;
- }
- public void setPageNo(int pageNo) {
- this.pageNo = pageNo;
- }
- }
三:这时候就要做dao,service层的逻辑了,不过也挺简单的,概括来说,将调用dao查询出来的数据,在 service层将其存储到Pages<T>类中的pageList集合里面,并且还要把pageNo当前 页 setPageNo(pageNo)中,为嘛要这样呢,一将数据交给page类来分页处理,二在显示页面有首页,上一页,下一页,尾页吧,这就是原因啦, 要用来获取参数pageNo用的,别的也 不多说,先上代码看看:
- /**
- * 查询未借阅的图书
- */
- public Page<Book> findBook(int pageNo){
- Page<Book> pages = new Page<Book>(findBookCount());
- pages.setPageNo(pageNo);
- pages.setPageList(bookDao.findBook(pages.getStart(pageNo), pages.getPageSize()));
- return pages;
- }
- /**
- * 查询图书总数
- */
- public Integer findBookCount(){
- return bookDao.findBookCount();
- }
四:显示页:该页面只是简单地写了一下,其中bug还是挺多的,但具体怎么修改还需要结合项目来操作
- <form action="<%=basePath%>book/findBook" method="post">
- <a href="<%=basePath%>book/findBook?pageNo=1">【首页】</a>
- <a href="<%=basePath%>book/findBook?pageNo=${booklist.pageNo-1}">【上一页】</a>
- <c:forEach begin="1" var="i" end="${booklist.totalPages}">
- <a href="<%=basePath%>book/findBook?pageNo=${i }">${i }</a>
- </c:forEach>
- <a href="<%=basePath%>book/findBook?pageNo=${booklist.pageNo+1}">【下一页】</a>
- <a href="<%=basePath%>book/findBook?pageNo=${booklist.totalPages }">【尾页】</a>
- <input type="text" size="1" name="pageNo" value="${booklist.pageNo}"/>
- <input type="submit" value="GO" size="1"/>
- 当前第${booklist.pageNo}页/共${booklist.totalPages}页
- </form>
以上是我自己做的一个练习,还是有很多不足之处,其实分页方法有 很多种,我做的这种是物理分页,还有一种分页叫逻辑分页,这种分页方式依靠的是对结果集的算法来分页,因此通常被称为“逻辑分页”,该分页其实是将数据库的压力交给了应用端,其实这两种分页查询效率差别不大,但是我推荐使用物理分页,不能因为提高一些速度而将数据库的压力交给了应用端而使用逻辑分页,因为物理分页在其他的性能上足以弥补了少许的劣势。
一个用于分页的page类的更多相关文章
- Cygwin 是一个用于 Windows 的类 UNIX shell 环境
cygwin的安装使用 Cygwin 是一个用于 Windows 的类 UNIX shell 环境. 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性:以及 ...
- 分页复用代码【Page类、JSP显示页面】
前言 为了复用,记载一些以前写过的工具类.方法 page类 import java.util.List; /** * Created by ozc on 2017/3/1. */ public cla ...
- 思路 一般创建展示类时候 例如page类 会在网页上新增多个对应字段的隐藏域 用于存储值
思路 一般创建展示类时候 例如page类 会在网页上新增多个对应字段的隐藏域 用于存储值
- 实现一个名为Person的类和它的子类Employee,Manager是Employee的子类,设计一个方法add用于涨工资,普通员工一次能涨10%,经理能涨20%。
1.实现一个名为Person的类和它的子类Employee,Manager是Employee的子类,设计一个方法add用于涨工资,普通员工一次能涨10%,经理能涨20%.具体要求如下:(1)Perso ...
- java使用注解和反射打造一个简单的jdbc工具类
a simple jdbc tools 如有转载和引用,请注明出处,谢谢 1. 定义我们需要的注解 要想实现对数据库的操作,我们必须知道数据表名以及表中的字段名称以及类型,正如hibernate 使用 ...
- org.springside.modules.orm中的page类自我解读
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler ...
- thinkphp方便分页的page方法
page方法也是模型的连贯操作方法之一,是完全为分页查询而诞生的一个人性化操作方法. 用法 我们在前面已经了解了关于limit方法用于分页查询的情况,而page方法则是更人性化的进行分页查询的方法,例 ...
- 【ASP.NET 基础】Page类和回调技术
Page 类有一个 IsPostBack 属性,这个属性用来指示当前页面是第一次加载还是响应了页面上某个控件的服务器事件导致回发而加载. 1.asp.net页面的声明周期 asp.net页面运行的时候 ...
- Django 2.0.1 官方文档翻译:编写你的第一个djang补丁(page 15)
编写你的第一个djang补丁(page 15) 介绍 有兴趣为社区做一些贡献?可能你发现了django中的一个你想修复的bug,或者你你想添加一个小小的功能. 回馈django就是解决你遇到的问题的最 ...
随机推荐
- Java: 集合类详解
0.参考文献 http://blog.csdn.net/liulin_good/article/details/6213815 1.java集合类图 1.1 1.2 上述类图中,实线边框的是实现类,比 ...
- web安全系列4:google语法
这是web安全的第四篇,欢迎翻看前面几篇. 前面我们介绍了一些和HTTP有关知识,那么一个疑问就是黑客要做的第一件是什么?其实很简单,确定一个目标,然后搜集信息. 这很容易理解,我们无论做什么都得先有 ...
- 关于String类学习的一些笔记(本文参考来自程序员考拉的文章)
String 类继承自 Object 超类,实现的接口有:Serializable.CharSequence.Comparable<String> 接口,具体如下图: 一.常用的Strin ...
- OpenXml修改word特定内容
采用OpenXml来修改word特定内容,如下: word: OpenXml修改word之前: OpenXml修改word之后: 代码: string path = @"C:\Users\A ...
- opencl 参考源码及benchmark
转载:https://www.zhihu.com/question/25539755/answer/44917891 CUDA 5之前的版本有OpenCL的sample,可以上网找找看 AMD APP ...
- PyCharm连接远程服务器
PyCharm连接远程服务器 1.Tools->Start SSH session 2.新建一个连接或者选择一个已经存在的sftp 3.选择Edit credentials 填写相关连接信息 4 ...
- Python小练习之判断一个日期是一年的第几天
python练手遇到的一个问题写了个统一公式,不用麻烦的分各种类,如果有人测试出错误请评论通知. #分单双月 def dayNum(month,day,isLeap): if month % 2 != ...
- 【转载】sql monitor
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27067062/viewspace-2129635/ SQL Monitor Report 1. SQL Monit ...
- 省钱版----查找 IoT 设备TTL线序__未完待续
作者:仙果 原文来自:省钱版—-查找 IoT 设备TTL线序 省钱版----查找 IoT 设备TTL线序__未完待续 缘由 在IoT固件调试分析的过程中,建议首先在IoT设备的板子上焊接调试线,这是能 ...
- Android JNI 学习(一):JNI 简介
JNI 即 Java Native Interface 是 native 编程接口,它允许在Java虚拟机(VM)内运行Java代码与其他编程语言(主要是C和C++)编写的应用程序和库进行交互操作. ...