分页查询数据库方法 /** * 分页查询方法 * @param sql,pageNO,maxResult * @return List */ public List<Object> queryPageSql(String hql, int pageNo, int pageSize){ try{ Session session=HibernateUtil.getSession(); Query q=session.createQuery(hql); //Hibernate查询起始位置 q.setFirstResult((pageNo-1)*pageSize); //从起始位查询多少条数据 q.setMaxResults(pageSize); List<Object> list=(List<Object>)q.list(); return list; }catch(Exception e){ e.printStackTrace(); }finally{ HibernateUtil.closeSession(); } return null; } 分页实体类PageModel,主要的分页查询方法pageQuery PACKAGE SSH.GX; import java.util.List; import ssh.Tb.User; public class PageModel { private int totalRecords; //数据总条数 private int pageNo; //当前页 private int pageSize; //每页多少条 private List<Object> list;//查询到的数据集合 private int totalPageNo;//共多少页 /** * 获取上一页 */ public int getPreviousPageNo(){ if(pageNo>1){ return pageNo-1; }else{ return 1; } } /** * 获取下一页 */ public int getNextPageNo(){ if(pageNo>=getTotalPageNo()){ //如果总页数为0这返回1,否则返回总页数 return getTotalPageNo()==0?1:getTotalPageNo(); }else{ return pageNo+1; } } /** * 获取分页集合函数 * @param pageModel * @param hql * @param pageTab * @return PageModel * @see pageTab控制查询的1:下一页;2:上一页;3:第一页;4:最后一页 */ public PageModel pageQuery(PageModel pageModel,String hql,int pageTab){ HibernateDB hdb=new HibernateDB(); //查询数据的总条数并赋值给totalRecords变量 List<Object> lists=(List<Object>)hdb.querySql(hql); totalRecords=lists.size(); //给没有查询条数赋值默认值 if(pageModel.getPageSize()==0){pageModel.setPageSize(5);} //执行获取下一页 if(pageTab==1){ //执行获取下一页 if(pageModel.getPageNo()==0){ pageModel.setPageNo(1); }else{ pageModel.setPageNo(pageModel.getNextPageNo()); } }else if(pageTab==2){ //执行获取上一页 if(pageModel.getPageNo()==0) pageModel.setPageNo(1); else pageModel.setPageNo(pageModel.getPreviousPageNo()); }else if (pageTab==3){ //获取第一页 pageModel.pageNo=1; }else{ //获取最后一页 pageModel.pageNo=pageModel.getTotalPageNo(); } //查询分页数据 list=(List<Object>)hdb.queryPageSql(hql,pageModel.getPageNo(),pageModel.getPageSize()); return pageModel; } public int getTotalRecords() { return totalRecords; } public void setTotalRecords(int totalRecords) { this.totalRecords = totalRecords; } 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 getTotalPageNo() { return totalPageNo=(totalRecords + pageSize -1)/pageSize; } public void setTotalPageNo(int totalPageNo) { this.totalPageNo = totalPageNo; } public List<Object> getList() { return list; } public void setList(List<Object> list) { this.list = list; } } Action类查询,必须使用spring配置文件将PageModel类注入到Action中。 /** * 分页查询下一页 * @return */ public String nextQuery(){ pageModel.pageQuery(pageModel, "from User", 1); return "query"; } /** * 分页查询上一页 * @return */ public String backQuery(){ pageModel.pageQuery(pageModel, "from User", 2); return "query"; } /** * 分页查询第一页 * @return */ public String firstQuery(){ pageModel.pageQuery(pageModel, "from User", 3); return "query"; } /** * 分页查询最后一页 * @return */ public String endQuery(){ pageModel.pageQuery(pageModel, "from User",4); return "query"; } Struts.xml文件配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!-- 配置Struts支持动态Action, 必须存在 --> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <!-- strict-method-invocation在2.5版本,为了限制DMI, 默认启用了严格的方法访问,不想启用要改为false, 如果启用严格访问模式,无法实现动态Action --> <package name="mypackage" extends="struts-default" strict-method-invocation="false"> <action name="user*" class="ssh.action.UserAction" method="{1}"> <result name="success"> /jsp/mian.jsp</result> <result name="login"> index.jsp </result> <result name="saveerror">/jsp/save.jsp</result> <result name="query">/jsp/query.jsp</result> </action> </package> </struts> query.jsp页面显示 <table> <s:iterator value="pageModel.list" id="u" > <tr> <td><s:property value="#u.id"/></td> <td><s:property value="#u.username"/></td> </tr> </s:iterator> <tr> <td><s:a href="userfirstQuery">首页</s:a> <s:a href="userbackQuery?pageModel.pageNo=%{pageModel.pageNo}">上一页</s:a> <s:property value="pageModel.pageNo" />/<s:property value="pageModel.totalPageNo"/> <s:a href="usernextQuery?pageModel.pageNo=%{pageModel.pageNo}">下一页</s:a> <s:a href="userendQuery">末页</s:a></td> <td></td> </tr> </table>