今天周一,趁工作轻松,自己就写了一个基于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类的更多相关文章

  1. Cygwin 是一个用于 Windows 的类 UNIX shell 环境

    cygwin的安装使用   Cygwin 是一个用于 Windows 的类 UNIX shell 环境. 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性:以及 ...

  2. 分页复用代码【Page类、JSP显示页面】

    前言 为了复用,记载一些以前写过的工具类.方法 page类 import java.util.List; /** * Created by ozc on 2017/3/1. */ public cla ...

  3. 思路 一般创建展示类时候 例如page类 会在网页上新增多个对应字段的隐藏域 用于存储值

    思路 一般创建展示类时候 例如page类 会在网页上新增多个对应字段的隐藏域 用于存储值

  4. 实现一个名为Person的类和它的子类Employee,Manager是Employee的子类,设计一个方法add用于涨工资,普通员工一次能涨10%,经理能涨20%。

    1.实现一个名为Person的类和它的子类Employee,Manager是Employee的子类,设计一个方法add用于涨工资,普通员工一次能涨10%,经理能涨20%.具体要求如下:(1)Perso ...

  5. java使用注解和反射打造一个简单的jdbc工具类

    a simple jdbc tools 如有转载和引用,请注明出处,谢谢 1. 定义我们需要的注解 要想实现对数据库的操作,我们必须知道数据表名以及表中的字段名称以及类型,正如hibernate 使用 ...

  6. org.springside.modules.orm中的page类自我解读

    // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler ...

  7. thinkphp方便分页的page方法

    page方法也是模型的连贯操作方法之一,是完全为分页查询而诞生的一个人性化操作方法. 用法 我们在前面已经了解了关于limit方法用于分页查询的情况,而page方法则是更人性化的进行分页查询的方法,例 ...

  8. 【ASP.NET 基础】Page类和回调技术

    Page 类有一个 IsPostBack 属性,这个属性用来指示当前页面是第一次加载还是响应了页面上某个控件的服务器事件导致回发而加载. 1.asp.net页面的声明周期 asp.net页面运行的时候 ...

  9. Django 2.0.1 官方文档翻译:编写你的第一个djang补丁(page 15)

    编写你的第一个djang补丁(page 15) 介绍 有兴趣为社区做一些贡献?可能你发现了django中的一个你想修复的bug,或者你你想添加一个小小的功能. 回馈django就是解决你遇到的问题的最 ...

随机推荐

  1. py3.0第四天 函数,生成器迭代器等

    1.列表生成式,迭代器&生成器 孩子,我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 > ...

  2. Pycharm下面出现No R interpreter defined

    安装Pycharm进行Python开发时,经常右下角提示No R interpreter defined,处理方式: 1.安装R,然后将R的路径添加到Pycharm中: 2.如果不需要进行R语言开发, ...

  3. Goldwave-5.7[逆向流程+算法分析]

    目标程序:Goldwave 5.7 分析工具: 1.OllyDbg 2.IDAPro 目的:用C语言写Goldwave-5.7的注册机. 0x0思路: 1.注册机准备: 功能:输入用户名后经过计算输出 ...

  4. Java中Json字符串直接转换为对象(包括多层List集合)

    使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...

  5. mycat跟踪分析

    mycat版本1.6 192.168.5.66 从 192.168.5.67主 一个user表 验证主从 log4j2修改日志level为debug schema.xml配置 启动服务,打开日志tai ...

  6. [转].NET Core、Xamarin、.NET Standard和.NET Framework四者之间的区别

    转至:https://segmentfault.com/a/1190000011539920 前段时日微软(Microsoft)正式发布了.NET Core 2.0,在很多开发社区中反响不错.但还是有 ...

  7. UE4动画及相关物理的更新顺序图

  8. easyui的下拉框combox动态复赋值显示在前端

    editbale:false设置为本输入框禁止编辑

  9. 进军微信小程序之准备工作

    小程序这么火,不去浪一浪怎么行?   更何况,现在微信“赦免”了个人认证,又更新了web开发工具,现在正是搞搞小程序的最佳时期! 那么一起来看看要做什么准备吧~   官方的文档很详细,可参考:小程序官 ...

  10. Exp2 后门原理与实践-------20164325王晓蕊

    Exp2 后门原理与实践 任务一:使用netcat获取主机操作Shell,cron启动 1.windows获取linux shell 1.1 ipconfig  查看本机查看以太网适配器(8)的ipv ...