[drp 5] pageModel的建立,实现分页查询
导读:之前做的分页,一直都是用的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的建立,实现分页查询的更多相关文章
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
- SQL 数据分页查询
最近学习了一下SQL的分页查询,总结了以下几种方法. 首先建立了一个表,随意插入的一些测试数据,表结构和数据如下图: 现在假设我们要做的是每页5条数据,而现在我们要取第三页的数据.(数据太少,就每页5 ...
- 【java】分页查询实体类
package com.dmsd.itoo.tool.pageModel; import java.io.Serializable; import java.util.HashMap; import ...
- mysql分页查询详解
我们做的后端项目一般都会有admin管理端,当管理端将要展示数据的时候,就需要用到分页.所以分页的考查在面试中也相当多.在mysql中进行分页查询时,一般会使用limit查询,而且通常查询中都会使用o ...
- Oracle、MySql、SQLServer 数据分页查询
最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...
- [.NET] SQL数据分页查询
[.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...
- mysql和oracle 分页查询(转)
最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...
- T-SQL 随机返回特定行数据和分页查询
T-SQL 随机返回特定行数据和分页查询 T-SQL 语言相较于标准SQL添加了很多特性,为了提高SQL Server的表现,是有必要深入了解的,面试时一般也会包含这两个小问题. 首先,是在一个Adv ...
随机推荐
- hibernateUtils
hibernate3.x版本 package hibernate_01; import org.hibernate.Session; import org.hibernate.SessionFacto ...
- U3d中实现A*寻路,附源文件
图片看不清楚,请点击看大图 http://pan.baidu.com/s/1pKwmOYn 写了好多,没保存,哎哎哎 空格键开始移动
- Java的最大优势还是跨平台么?
之前码农界有码农说Java的最大优势是跨平台,真的是这样么?其实当时网络没这么火爆的时候,确实是这样的,但现在这已然不是了. 跨平台还是Java的最大优势么? 有跨平台需求的仅仅是客户端应用,而不是服 ...
- BIP_开发案例05_BI Pubisher标准做法以BIP.XML为数据源以BIP.RTF为模板的简单例子(案例)
2014-05-31 Created By BaoXinjian
- BEvent_客制化BusinessEvent通过Workflow Event接受消息传递(案例)
2014-08-03 Created By BaoXinjian
- HDU 1272 小希的迷宫(并查集)
题解: 首先,init,find,union操作都是模版,多敲几遍,在记记,就没问题了. 然后,本题就是多了一个flag数组,记录数据是否出现过,最后记录最小,和最大,遍历一般他们的父亲,只有一个就是 ...
- SPOJ Query on a tree 树链剖分 水题
You are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, ...
- POJ 3162 Walking Race 树形DP+线段树
给出一棵树,编号为1~n,给出数m 漂亮mm连续n天锻炼身体,每天会以节点i为起点,走到离i最远距离的节点 走了n天之后,mm想到知道自己这n天的锻炼效果 于是mm把这n天每一天走的距离记录在一起,成 ...
- Imread函数不好使的替用方法
Mat img = imread("pp.jpg"); || IplImage*iplImg = cvLoadImage("pp.jpg");//由于imrea ...
- Git hub pull时候的错误 : The current branch is not configured for pull No value for key branch.master.merge found in configuration
网上多半都是命令行下的解决方案,我用的是EGit,所以要在eclipse里(我的版本是kepler)把下面这句话添加到配置文件中. Window->Preference->Team-> ...