[drp 5] pageModel的建立,实现分页查询
来源:互联网 发布:免费com域名 编辑:程序博客网 时间:2024/05/21 22:37
导读:之前做的分页,一直都是用的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(SELECTrow_number () OVER (ORDER BY[排序字段] DESC) AS num ,*FROM[表单名称] pWHEREp.state = 'T') x where [当前记录的限制字段]=[字段值]</span>
0 0
- [drp 5] pageModel的建立,实现分页查询
- DRP封装PageModel实现分页查询
- 封装PageModel分页实现查询功能
- 封装PageModel分页实现查询功能
- 分页PageModel
- 【DRP】Model1与Model2分别实现分页查询
- drp项目--分页查询用户信息
- 数据分页模块系列 完美封装PageModel实现分页模块
- 25.avi 【PageModel的实现原理】
- PageModel 分页参数
- java分页PageModel
- 封装PageModel分页
- 数据分页模块系列 (二) 完美封装PageModel实现分页模块
- 查询分页的SQL实现
- oracle分页查询的实现
- Hibernate分页查询的实现
- hibernate分页查询的实现
- 跨库跨表的分页查询实现
- cookie,session 和AJAX
- 每天laravel-20160728| Genaerator command-6
- 批量删除
- 内存管理:_CrtDumpMemoryLeaks和_CrtSetBreakAlloc
- svn命令行使用总结(转载集合)
- [drp 5] pageModel的建立,实现分页查询
- HTML兼容问题小结
- 线程带参数的例子
- BIOS中断相关资料和应用
- 编程好习惯
- Java注解(二) 系统注解
- leetcode——95——Unique Binary Search Trees II
- 【HDU】 1532 Drainage Ditches
- iOS 7的手势滑动返回功能