导读:之前做的分页,一直都是用的easy——UI分页,然后没有系统的整理过,就是知道传几个参数,然后云云。这次,从头到尾总结一下,了了我的这桩心愿。人事系统的重定向工作,一直刺激着我一定要总结总结这个分页。嗯,是这样的!

一、建立分页Model类

在这个类中,包含了几个基本的信息;总页数、总记录数、上一页、下一页、页容量等。这些配置,之前都是easy-UI 的一些属性,现在自己进行建立。这个类,在本篇博客中,没有用到。它的主要作用,在前台点击上一页、下一页、第一页、最后一页时获取参数值。

<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.angel.drp.util;

import java.util.List;

/**
* 封装分页信息
* @author AngelHHX
*
*/
public class PageModel<E> { //结果集
private List<E> list; //查询记录数
private int totalRecords; //每页多少条数据
private int pageSize; //第几页
private int pageNo; /**
* 总页数
* @return
*/
public int getTotalPages() {
return (totalRecords + pageSize - 1) / pageSize;
} /**
* 取得首页
* @return
*/
public int getTopPageNo() {
return 1;
} /**
* 上一页
* @return
*/
public int getPreviousPageNo() {
if (pageNo <= 1) {
return 1;
}
return pageNo - 1;
} /**
* 下一页
* @return
*/
public int getNextPageNo() {
if (pageNo >= getBottomPageNo()) {
return getBottomPageNo();
}
return pageNo + 1;
} /**
* 取得尾页
* @return
*/
public int getBottomPageNo() {
return getTotalPages();
} public List<E> getList() {
return list;
} public void setList(List<E> list) {
this.list = list;
} public int getTotalRecords() {
return totalRecords;
} public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
} public int getPageSize() {
return pageSize;
} public void setPageSize(int pageSize) {
this.pageSize = pageSize;
} public int getPageNo() {
return pageNo;
} public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
}
</span>

二、实现分页查询

<span style="font-family:KaiTi_GB2312;font-size:18px;">/**
* 分页查询
* @param pageNo 第几页
* @param pageSize 每页多少条数据
* @return
*/
public PageModel<User> fundUserList(int pageNo,int pageSize){
StringBuffer sbSql=new StringBuffer();
sbSql.append("select user_id, user_name, password, contact_tel, email, create_date ")
.append("from ")
.append("( ")
.append("select rownum rn, user_id, user_name, password, contact_tel, email, create_date ")
.append("from ")
.append("( ")
.append("select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id <> 'root' order by user_id ")
.append(") where rownum <= ? ")
.append(") where rn > ? ");
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
PageModel<User> pageModel=null;
try {
conn=DbUtil.getConnection();
pstmt=conn.prepareStatement(sbSql.toString());
pstmt.setInt(1, pageNo*pageSize);
pstmt.setInt(2, (pageNo-1)*pageSize);
rs=pstmt.executeQuery();
List<User> userList=new ArrayList<User>(); while (rs.next()) {
User user=new User();
user.setUserId(rs.getString("user_id"));
user.setUserName(rs.getString("user_name"));
user.setPassword(rs.getString("password"));
user.setContactTel(rs.getString("contact_tel"));
user.setCreateDate(rs.getTimestamp("create_date"));
user.setEmail(rs.getString("email"));
userList.add(user);
}
pageModel =new PageModel<User>();
pageModel.setList(userList);
pageModel.setTotalRecords(getTotalRecords(conn));
pageModel.setPageNo(pageNo);
pageModel.setPageSize(pageSize);
} catch (Exception e) {
e.printStackTrace();
}finally{
DbUtil.close(rs);
DbUtil.close(pstmt);
DbUtil.close(conn);
}
return pageModel;
}</span>

要点:主要是三层SQL语句的嵌套。最里边的一层:select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id <> 'root' order by user_id 是从表中获取需要的数据;第二层:则是用rownum 给查询出来的数据编号;最外边的一层,则是根据传过来的参数,选择合适编号的数据。

这样子,在前台,只需要传过来第几页和页容量就行了。

三、总结和重定向的思考

在人事系统中,所用到的修改重定向或是添加重定向,都可以从这个分页查询中,窥探出一二来,最开始的时候,是因为对这个分页的逻辑不明白,一旦明白了这一点,就显得比较容易了。

如果要进行重定向(编辑),那么应该有以下几个要点;

1,获取目前的总记录数;2,获取当前记录在数据库中所在的位置;3,获取页容量。那么根据分页的逻辑和算法,可以得出:总页数,当前记录所在的页码。这样子,就可以进行重定向了。下面是获取当前记录的所在位置代码:

<span style="font-family:KaiTi_GB2312;font-size:18px;">select num from(
SELECT
row_number () OVER ( ORDER BY
[排序字段] DESC
) AS num ,*
FROM
[表单名称] p
WHERE
p.state = 'T') x where [当前记录的限制字段]=[字段值]</span>

[drp 5] pageModel的建立,实现分页查询的更多相关文章

  1. JdbcTemplate+PageImpl实现多表分页查询

    一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...

  2. SQL 数据分页查询

    最近学习了一下SQL的分页查询,总结了以下几种方法. 首先建立了一个表,随意插入的一些测试数据,表结构和数据如下图: 现在假设我们要做的是每页5条数据,而现在我们要取第三页的数据.(数据太少,就每页5 ...

  3. 【java】分页查询实体类

    package com.dmsd.itoo.tool.pageModel; import java.io.Serializable; import java.util.HashMap; import ...

  4. mysql分页查询详解

    我们做的后端项目一般都会有admin管理端,当管理端将要展示数据的时候,就需要用到分页.所以分页的考查在面试中也相当多.在mysql中进行分页查询时,一般会使用limit查询,而且通常查询中都会使用o ...

  5. Oracle、MySql、SQLServer 数据分页查询

    最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...

  6. [.NET] SQL数据分页查询

    [.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...

  7. mysql和oracle 分页查询(转)

    最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...

  8. Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

    HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...

  9. T-SQL 随机返回特定行数据和分页查询

    T-SQL 随机返回特定行数据和分页查询 T-SQL 语言相较于标准SQL添加了很多特性,为了提高SQL Server的表现,是有必要深入了解的,面试时一般也会包含这两个小问题. 首先,是在一个Adv ...

随机推荐

  1. 《黄聪:手机移动站SEO优化教程》4、如何实现手机移动网站和PC站点的自主适配

    视频地址:http://www.tudou.com/programs/view/v4Hur5vjav4/ 1.自主适配 A:站点自己做好PC与手机之间的适配,以及手机站各个版式之间的适配.当手机用户通 ...

  2. Java的clone机制(及String的特殊性)

    1. Clone&Copy 假设现在有一个Employee对象,Employee tobby =new Employee(“CMTobby”,5000),通常我们会有这样的赋值Employee ...

  3. WindowsForm应用程序调用WebService

    本文原创,如需转载,请标明源地址,谢谢合作!http://blog.csdn.net/sue_1989/article/details/6597078 本文的编写IDE为VSTS2008和.NET F ...

  4. 欧洲用户放弃Android转投iOS原因大起底

    据报道,近期在欧洲,有32.4%的新ios设备iPhone用户之前使用的是Android设备.那么为什么欧洲会有这么多Android用户会纷纷抛弃原有操作系统平台而转投iPhone呢? ios设备的同 ...

  5. NeHe OpenGL教程 第四十三课:FreeType库

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. semanage: 未找到命令

    [root@hn ~]# semanage port -l|grep ssh-bash: semanage: 未找到命令 yum -y install policycoreutils-python

  7. ubuntu 格式化U盘,并制作系统镜像

    1. 先要卸载U盘,使用如下命令: #umount /dev/sdb1 注意:/dev/后面的设备要根据你的实际情况而定,否则后面格式化,丢失数据!! 格式化U盘,并建立vfat文件系统 #mkfs. ...

  8. Web性能压力测试工具之Apache AB 详解

    下载安装地址: http://httpd.apache.org/download.cgi yum install httpd-tools http://www.apachelounge.com/dow ...

  9. ORACLE 查看数据库中有哪些表

    SELECT TABLE_NAME FROM USER_TABLES ORDER BY TABLE_NAME;

  10. java io InputStream 转 byte

    InputStream is ; ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] b = new byte[1024] ...