封装PageModel分页

本文详细介绍了分页查询的实现方式,包括封装分页类PageModel的使用方法及分页查询的具体步骤,以及如何在配置文件中设置每页显示的记录数,并通过上下翻页操作展示不同页面的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

封装分页类:PageModel

[java]  view plain  copy
 print ?
  1. package com.xxjstgb.drp.util;  
  2. import java.util.List;  
  3. /** 
  4.  * 封装分页信息 
  5.  * @author liuzhengquan 
  6.  * 
  7.  */  
  8. public class PageModel<E> {  
  9.     //结果集  
  10.     private List<E> list;  
  11.     //查询记录数  
  12.     private int totalRecords;  
  13.     //每页多少条数据  
  14.     private int pageSize;  
  15.     //第几页  
  16.     private int pageNo;  
  17.     /** 
  18.      * 总页数 
  19.      * @return 
  20.      */  
  21.     public int getTotalPages(){  
  22.         return(totalRecords+pageSize-1)/pageSize;  
  23.     }  
  24.     /** 
  25.      * 取得首页 
  26.      * @return 
  27.      */  
  28.     public int getTopPageNo(){  
  29.         return 1;  
  30.     }  
  31.     public List<E> getList() {  
  32.         return list;  
  33.     }  
  34.     /** 
  35.      * 上一页 
  36.      * @return 
  37.      */  
  38.     public int getPreviousPageNo(){  
  39.         if(pageNo<=1){  
  40.             return 1;  
  41.         }  
  42.         return pageNo-1;  
  43.     }  
  44.     /** 
  45.      * 下一页 
  46.      * @return 
  47.      */  
  48.     public int getNextPageNo(){  
  49.         if(pageNo>=getBottomPageNo()){  
  50.             return getBottomPageNo();  
  51.         }  
  52.         return pageNo+1;  
  53.     }  
  54.     /** 
  55.      * 取得尾页 
  56.      * @return 
  57.      */  
  58.     public int getBottomPageNo(){  
  59.         return getTotalPages();  
  60.     }  
  61.     public void setList(List<E> list) {  
  62.         this.list = list;  
  63.     }  
  64.     public int getTotalRecords() {  
  65.         return totalRecords;  
  66.     }  
  67.     public void setTotalRecords(int totalRecords) {  
  68.         this.totalRecords = totalRecords;  
  69.     }  
  70.     public int getPageSize() {  
  71.         return pageSize;  
  72.     }  
  73.     public void setPageSize(int pageSize) {  
  74.         this.pageSize = pageSize;  
  75.     }  
  76.     public int getPageNo() {  
  77.         return pageNo;  
  78.     }  
  79.     public void setPageNo(int pageNo) {  
  80.         this.pageNo = pageNo;  
  81.     }  
  82. }  


分页查询的方法:使用拼接SQL语句,查询出分页的结果,并将查询结果返回给封装好的PageModel。

[java]  view plain  copy
 print ?
  1. package com.xxjstgb.drp.sysmgr.manager;  
  2. import java.sql.Connection;  
  3. import java.sql.PreparedStatement;  
  4. import java.sql.ResultSet;  
  5. import java.sql.SQLException;  
  6. import java.util.List;  
  7. import java.util.ArrayList;  
  8. import com.xxjstgb.drp.sysmgr.domain.User;  
  9. import com.xxjstgb.drp.util.Dbutil;  
  10. import com.xxjstgb.drp.util.PageModel;  
  11. /** 
  12.  * 分页查询信息 
  13.  * @author liuzhengquan 
  14.  */  
  15. public class testUser {  
  16.     /** 
  17.      * 分页查询用户列表 
  18.      * @param pageNo 第几页 
  19.      * @param pageSize 每页多少条数据 
  20.      * @return pageModel 
  21.      * @throws SQLException  
  22.      */  
  23.     public PageModel<User> testUserList(int pageNo, int pageSize) throws SQLException {  
  24.         StringBuffer sbStr=new StringBuffer();  
  25.         sbStr  
  26.         .append("select * from ")  
  27.         .append("( ")  
  28.             .append("select rownum rn, user_id,user_name,password from ")   
  29.                 .append("( ")  
  30.                     .append("select user_id,user_name,password from t_user order by user_id ")  
  31.                 .append(") ")  
  32.           .append("where rownum <= ? ")   
  33.         .append(") ")  
  34.         .append("where rn> ? ");   
  35.         Connection conn = null;  
  36.         PreparedStatement pstmt = null;  
  37.         ResultSet rs = null;  
  38.         //User 为实体,包含userId、UserName、password三个属性  
  39.         PageModel<User> pageModel = null;  
  40.         try {  
  41.             conn = Dbutil.getConnection();  
  42.             pstmt = conn.prepareStatement(sbStr.toString());  
  43.   
  44.             pstmt.setInt(1, pageNo * pageSize);  
  45.             pstmt.setInt(2, (pageNo - 1) * pageSize);  
  46.             rs = pstmt.executeQuery();  
  47.             List<User> userList = new ArrayList<User>();  
  48.             while (rs.next()) {  
  49.                 User user = new User();  
  50.                 user.setUserId(rs.getString("user_id"));  
  51.                 user.setUserName(rs.getString("user_name"));  
  52.                 user.setPassword(rs.getString("password"));  
  53.                 userList.add(user);  
  54.             }  
  55.             pageModel = new PageModel<User>();  
  56.             pageModel.setList(userList);  
  57.             pageModel.setTotalRecords(getTotalRecords(conn));  
  58.             pageModel.setPageSize(pageSize);  
  59.             pageModel.setPageNo(pageNo);  
  60.         } catch (SQLException e) {  
  61.             e.printStackTrace();  
  62.         } finally {  
  63.             rs.close();  
  64.             pstmt.close();  
  65.             conn.close();  
  66.         }  
  67.         return pageModel;  
  68.     }  
  69.     /** 
  70.      * 取得总记录数 
  71.      * @param conn 连接 
  72.      * @return 返回记录数 
  73.      * @throws SQLException  
  74.      */  
  75.     private int getTotalRecords(Connection conn) throws SQLException {  
  76.         String strSql = "select count(*) from t_user";  
  77.         PreparedStatement pstmt = null;  
  78.         ResultSet rs = null;  
  79.         int count = 0;  
  80.         try {  
  81.             pstmt = conn.prepareStatement(strSql);  
  82.             rs = pstmt.executeQuery();  
  83.             rs.next(); // 找不到时为0,找到为相应的值  
  84.             count = rs.getInt(1);  
  85.         } catch (SQLException e) {  
  86.             e.printStackTrace();  
  87.         } finally {  
  88.             rs.close();  
  89.             pstmt.close();  
  90.         }  
  91.         return count;  
  92.     }  
  93. }  

将每一页面容纳信息的条数配置在配置在context-param里面,取的时候通过ServletContext取得。

[html]  view plain  copy
 print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4"   
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  7.     <context-param>  
  8.         <param-name>page-size</param-name>  
  9.         <param-value>3</param-value>  
  10.     </context-param>  
  11. </web-app>  

调用:

[html]  view plain  copy
 print ?
  1. <%@ page import="com.xxjstgb.drp.sysmgr.domain.*" %>  
  2. <%@ page import="com.xxjstgb.drp.sysmgr.manager.*" %>     
  3. <%@ page import="com.xxjstgb.drp.util.*" %>  
  4. <%@ page import="java.util.*" %>    
  5. <%@ page import="java.text.*" %>  
  6. <%   
  7.     int pageNo = 1;  
  8.     String pageNoString = request.getParameter("pageNo");  
  9.     int pageSize = Integer.parseInt(this.getServletContext()  
  10.             .getInitParameter("page-size"));  
  11.     if(pageNoString !=null){  
  12.         pageNo=Integer.parseInt(pageNoString);  
  13.     }  
  14.     testUser tUser=new testUser();  
  15.     PageModel<User> pageModel=tUser.testUserList(pageNo,pageSize);  
  16. %>  

上下翻页:

  1. <script type="text/javascript">  
  2.             //首页  
  3.             function topPage() {  
  4.                 window.self.location="user_maint.jsp?pageNo=<%=pageModel.getTopPageNo()%>";  
  5.                 //user_maint.jsp?pageNo=<%=pageModel.getTopPageNo()%>  
  6.                 //alert("");  
  7.             }   //=<%=pageModel.getTopPageNo()%>";  
  8.             //上一页  
  9.             function previousPage() {  
  10.                 window.self.location="user_maint.jsp?pageNo=<%=pageModel.getPreviousPageNo()%>";  
  11.             }     
  12.             //下一页  
  13.             function nextPage() {  
  14.                 window.self.location="user_maint.jsp?pageNo=<%=pageModel.getNextPageNo()%>";  
  15.             }  
  16.             //尾页  
  17.             function bottomPage() {  
  18.                 //getBottomPageNo  
  19.                 window.self.location="user_maint.jsp?pageNo=<%=pageModel.getBottomPageNo()%>";  
  20.             }  
  21. </script>  


至此,分页查询就完成了。使用分页查询的地方非常多,这种封装的思想特别好。如果我们不进行封装,一些代码就需要我们一遍一遍的重复去写。

好的代码需要我们用心推敲,用“不将就”的心态写代码、思考代码,我相信也只有这样,才能提升我们的编码水平。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值