Oracle下的Java分页功能_动力节点Java学院整理

分页的时候返回的不仅包括查询的结果集(List),而且还包括总的页数(pageNum)、当前第几页(pageNo)等等信息,所以我们封装一个查询结果PageModel类,具体实现代码,大家参考下本文

就如平时我们很在分页中看到的,分页的时候返回的不仅包括查询的结果集(List),而且还包括总的页数(pageNum)、当前第几页(pageNo)等等信息,所以我们封装一个查询结果PageModel类,代码如下:

{ private List list; private int pageNo; private int pageSize; private int totalNum; private int totalPage; public List getList() { return list; } public void setList(List list) { this.list = list; } public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalNum() { return totalNum; } public void setTotalNum(int totalNum) { this.totalNum = totalNum; setTotalPage((getTotalNum() % pageSize) == 0 ? (getTotalNum() / pageSize) : (getTotalNum() / pageSize + 1)); } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } // 获取第一页 public int getFirstPage() { return 1; } // 获取最后页 public int getLastPage() { return totalPage; } // 获取前页 public int getPrePage() { if (pageNo > 1) return pageNo – 1; return 1; } // 获取后页 public int getBackPage() { if (pageNo < totalPage) return pageNo + 1; return totalPage; } // 判断'首页'及‘前页'是否可用 public String isPreable() { if (pageNo == 1) return "disabled"; return ""; } // 判断'尾页'及‘下页'是否可用 public String isBackable() { if (pageNo == totalPage) return "disabled"; return ""; } }

其中使用泛型是为了能使的该分页类能进行重用,比如在查询用户时可以封装User对象、在查询财务中的流向单时可以封装流向单FlowCard类。

我们以查询用户为例,用户选择查询条件,首先调用Servlet获取查询参数,然后请求业务逻辑层取得分页封装结果类。业务逻辑调用Dao层取得结果集、取得中记录数封装成分页类。最后Servlet将结果设置到jsp页面显示。

首先来讲解Servlet,代码如下:

pagination = userInfoManage.userBasicSearch(u,pageNo,pageSize); List userList = pagination.getList(); // 3.封装返回结果 StringBuffer resultXML = new StringBuffer(); try { resultXML.append(“<?xml version='1.0' encoding='gb18030'?>/n”); resultXML.append(“/n”); for (Iterator iterator = userList.iterator(); iterator .hasNext();) { UserInfo userInfo = iterator.next(); resultXML.append(“/n”); resultXML.append(“/t” + userInfo.getId() + “/n”); resultXML.append(“/t” + userInfo.getTruename() + “/n”); resultXML.append(“/t” + userInfo.getSex() + “/n”); resultXML.append(“/t” + userInfo.getHome() + “/n”); resultXML.append(“/n”); } resultXML.append(“/n”); resultXML.append(“/t” + pagination.getTotalPage() + “/n”); resultXML.append(“/t” + pagination.getFirstPage() + “/n”); resultXML.append(“/t” + pagination.getLastPage() + “/n”); resultXML.append(“/t” + pagination.getPageNo() + “/n”); resultXML.append(“/n”); resultXML.append(“/n”); } catch (Exception e) { e.printStackTrace(); } writeResponse(req,resp,resultXML.toString()); } public void writeResponse(HttpServletRequest request,HttpServletResponse response,String result) throws IOException { response.setContentType(“text/xml”); response.setHeader(“Cache-Control”,”no-cache”); response.setHeader(“Content-Type”,”text/xml; charset=gb18030″); PrintWriter pw = response.getWriter(); pw.write(result); pw.close(); } }

其中User对象代码如下:

接着是业务逻辑层代码,代码如下:

userBasicSearch(UserInfo u,int pageNo,int pageSize) throws Exception { Connection connection = null; PageModel pagination = new PageModel(); try { connection = DBUtility.getConnection(); DBUtility.setAutoCommit(connection,false); pagination.setList(userInfoDao.getUserList(u,pageSize)); pagination.setPageNo(pageNo); pagination.setPageSize(pageSize); pagination.setTotalNum(userInfoDao.getTotalNum(u)); DBUtility.commit(connection); } catch (Exception e) { DBUtility.rollBack(connection); e.printStackTrace(); throw new Exception(); } finally { DBUtility.closeConnection(); } return pagination; } }

其中DBUtility为数据库的连接封装类。

最后是Dao层代码实现,代码如下:

getUserList(UserInfo userInfo,int pageSize) throws Exception { PreparedStatement pstmt = null; ResultSet rs = null; List userList = null; try { String sql = “select * from(select rownum num,u.* from(select * from user_info where sex = ? and home like ‘” + userInfo.getHome() + “%” + “‘ and colleage like ‘” + userInfo.getColleage() + “%” + “‘ and comingyear like ‘” + userInfo.getCy() + “%” + “‘ order by id) u where rownum<=?) where num>=?”; userList = new ArrayList(); Connection conn = DBUtility.getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setString(1,userInfo.getSex()); pstmt.setInt(2,pageNo * pageSize); pstmt.setInt(3,(pageNo – 1) * pageSize + 1); rs = pstmt.executeQuery(); while (rs.next()) { UserInfo user = new UserInfo(); user.setId(rs.getInt(“id”)); user.setTruename(rs.getString(“truename”)); user.setSex(rs.getString(“sex”)); user.setHome(rs.getString(“home”)); userList.add(user); } } catch (SQLException e) { e.printStackTrace(); throw new Exception(e); } finally { DBUtility.closeResultSet(rs); DBUtility.closePreparedStatement(pstmt); } return userList; } public int getTotalNum(UserInfo userInfo) throws Exception { PreparedStatement pstmt = null; ResultSet rs = null; int count = 0; try { String sql = “select count(*) from user_info where sex=? and home like ‘” + userInfo.getHome() + “%” + “‘ and colleage like ‘” + userInfo.getColleage() + “%” + “‘ and comingyear like ‘” + userInfo.getCy()+ “%” + “‘”; Connection conn = DBUtility.getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setString(1,userInfo.getSex()); rs = pstmt.executeQuery(); if (rs.next()) { count = rs.getInt(1); } } catch (SQLException e) { e.printStackTrace(); throw new Exception(e); } finally { DBUtility.closeResultSet(rs); DBUtility.closePreparedStatement(pstmt); } return count; } }

最后就是servlet将得到的结果返回给jsp页面显示出来。

注:其中DBUtility代码是封装数据库连接操作的代码,如下:

作者: dawei

【声明】:永州站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部