java pagemodel_[Java 经验7] pageModel的建立,实现分页查询

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

一、建立分页Model类

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

package com.angel.drp.util;

import java.util.List;

/**

* 封装分页信息

* @author AngelHHX

*

*/

public class PageModel {

//结果集

private List 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 getList() {

return list;

}

public void setList(List 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;

}

}

二、实现分页查询

/**

* 分页查询

* @param pageNo 第几页

* @param pageSize 每页多少条数据

* @return

*/

public PageModel 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 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 userList=new ArrayList();

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();

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;

}

要点:主要是三层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,获取页容量。那么根据分页的逻辑和算法,可以得出:总页数,当前记录所在的页码。这样子,就可以进行重定向了。下面是获取当前记录的所在位置代码:

select num from(

SELECT

row_number () OVER (

ORDER BY

[排序字段] DESC

) AS num ,*

FROM

[表单名称] p

WHERE

p.state = 'T') x where [当前记录的限制字段]=[字段值]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值