下面是一个struts2+hibernate的分页显示,主要是用到了hibernate的相应分页方法大大简单了分页的代码
版本:Struts2.1.8
Hibernate3.2
Oracle9g
具体代码如下:
1.Plan.java
package com.creattech.plan; public class Plan { private Integer id; private String planId; private Integer materialId; private Integer materialIdl; private String materialName; private String speciFication; private String unit; private String planPurchase; private Integer completionrate; private Integer expuintPrice; private Integer expunitPriceo; private Integer exptotalPrice; private Integer exptotalPriceo; private Integer demandDepartment; public Integer getCompletionrate() { return completionrate; } public void setCompletionrate(Integer completionrate) { this.completionrate = completionrate; } public Integer getDemandDepartment() { return demandDepartment; } public void setDemandDepartment(Integer demandDepartment) { this.demandDepartment = demandDepartment; } public Integer getExptotalPrice() { return exptotalPrice; } public void setExptotalPrice(Integer exptotalPrice) { this.exptotalPrice = exptotalPrice; } public Integer getExptotalPriceo() { return exptotalPriceo; } public void setExptotalPriceo(Integer exptotalPriceo) { this.exptotalPriceo = exptotalPriceo; } public Integer getExpuintPrice() { return expuintPrice; } public void setExpuintPrice(Integer expuintPrice) { this.expuintPrice = expuintPrice; } public Integer getExpunitPriceo() { return expunitPriceo; } public void setExpunitPriceo(Integer expunitPriceo) { this.expunitPriceo = expunitPriceo; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getMaterialId() { return materialId; } public void setMaterialId(Integer materialId) { this.materialId = materialId; } public Integer getMaterialIdl() { return materialIdl; } public void setMaterialIdl(Integer materialIdl) { this.materialIdl = materialIdl; } public String getPlanId() { return planId; } public void setPlanId(String planId) { this.planId = planId; } public String getPlanPurchase() { return planPurchase; } public void setPlanPurchase(String planPurchase) { this.planPurchase = planPurchase; } public String getSpeciFication() { return speciFication; } public void setSpeciFication(String speciFication) { this.speciFication = speciFication; } public String getUnit() { return unit; } public void setUnit(String unit) { this.unit = unit; } public String getMaterialName() { return materialName; } public void setMaterialName(String materialName) { this.materialName = materialName; } }
2.Plan.hbm.xml
<?xml version="1.0" encoding='UTF-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping package="com.creattech.plan"> <class name="Plan" table="PLAN" lazy="false" > <id name="id" column="ID"> <generator class="native" /> </id> <property name="planId" column="PLANID" type="string" /> <property name="materialId" column="MATERIALID" /> <property name="materialIdl" column="MATERIALIDL" /> <property name="materialName" column="MATERIALNAME" /> <property name="speciFication" column="SPECIFICATION" /> <property name="unit" column="UNIT" type="string" /> <property name="planPurchase" column="PLANPURCHASE" /> <property name="completionrate" column="COMPLETIONRATE" /> <property name="expuintPrice" column="EXPUINTPRICE" /> <property name="expunitPriceo" column="EXPUNITPRICEO" /> <property name="exptotalPrice" column="EXPTOTALPRICE" /> <property name="exptotalPriceo" column="EXPTOTALPRICEO" /> <property name="demandDepartment" column="DEMANDDEPARTMENT" /> </class> </hibernate-mapping>
3.建表
大家可以根据实体类和配置文件自己建表
4.PlanDao.java
package com.creattech.plan.dao; import java.util.List; import com.creattech.plan.Plan; public interface PlanDao { public int getPlanTotalPage(int rowsPerPage); public List<Plan> findPlantByPage(int page, int rowsPerPage); public int getPlanNum(); }
5.HibernateUtils.java
package com.creattech.plan.dao.impl; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtils { private static Configuration conf; private static SessionFactory factory; static { conf = new Configuration(); conf.configure(); factory = conf.buildSessionFactory(); } public static Session getSession() { return factory.openSession(); } public static SessionFactory getSessionFactory() { return factory; } public static void main(String[] args) { Session session = HibernateUtils.getSession(); System.out.println(session); } }
6.PlanDaoImpl.java
package com.creattech.plan.dao.impl; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import com.creattech.plan.Plan; import com.creattech.plan.dao.PlanDao; public class PlanDaoImpl implements PlanDao { /** * 查找并返回所有计划 */ public List<Plan> findPlantByPage(int page, int rowsPerPage) { Session session = HibernateUtils.getSession(); Query query = session.createQuery("from Plan order by planId desc"); query.setMaxResults(rowsPerPage); // 每页最多显示几条 query.setFirstResult((page - 1) * rowsPerPage); // 每页从第几条记录开始 List<Plan> list = query.list(); for (int i = 0; i < list.size(); i++) { System.out.println("findPlantByPage:" + list.get(i).getMaterialName()); } session.close(); return list; } /** * 共多少页计划数据 */ public int getPlanTotalPage(int rowsPerPage) { // System.out.println("rowsPerPage:" + rowsPerPage); int rows = 0; String hql = "select count(*) from Plan"; Session session = HibernateUtils.getSession(); Query query = session.createQuery(hql); rows = ((Integer) query.iterate().next()).intValue(); // System.out.println("rows:" + rows); session.close(); if (rows % rowsPerPage == 0) { return rows / rowsPerPage; } else { return rows / rowsPerPage + 1; } } public int getPlanNum() { String hql = "select count(*) from Plan "; int rows = 0; Session session = HibernateUtils.getSession(); Query query = session.createQuery(hql); rows = ((Integer) query.iterate().next()).intValue(); session.close(); return rows; } /** * 条件查询后返回的计划总页数 */ public int getPlanTotalPage(int rowsPerPage, String type, String search) { int rows = 0; Session session = HibernateUtils.getSession(); String hql = "select count(*) from Plan p where p." + type + " like :type"; Query query = session.createQuery(hql); query.setString("type", "%" + search + "%"); rows = ((Integer) query.iterate().next()).intValue(); // System.out.println("rows:" + rows); session.close(); if (rows % rowsPerPage == 0) { return rows / rowsPerPage; } else { return rows / rowsPerPage + 1; } } /** * 条件查询后返回的计划数据总数 */ public int getPlanNum(String type, String search) { int rows = 0; Session session = HibernateUtils.getSession(); String hql = "select count(*) from Plan p where p." + type + " like :type"; Query query = session.createQuery(hql); query.setString("type", "%" + search + "%"); rows = ((Integer) query.iterate().next()).intValue(); // System.out.println("rows:" + rows); session.close(); return rows; } }
7.struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="page" extends="default" namespace="/"> <action name="showpage" class="com.com.creattech.plan.action.ShowAction"> <result name="success" type="dispatcher"> /WEB-INF/jsp/showpage.jsp</result> </action> </package> </struts>
8.ShowAction.java
package com.creattech.plan.action; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import com.creattech.plan.Plan; import com.creattech.plan.service.PlanService; import com.creattech.plan.service.impl.PlanServiceImpl; public class ShowAction { PlanService ps = new PlanServiceImpl(); List<Plan> pagePlanList = new ArrayList(); private int rowsPerPage = 10;// 每页显示几条 private int page = 1; // 默认当前页 private int totalPage;// 总共多少页 private int planNum;// 总过多少条 public String show() { System.out.println("Page:" + page); pagePlanList = ps.findPlantByPage(page, rowsPerPage); totalPage = ps.getPlanTotalPage(rowsPerPage); planNum = ps.getPlanNum(); return "success"; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } public int getRowsPerPage() { return rowsPerPage; } public void setRowsPerPage(int rowsPerPage) { this.rowsPerPage = rowsPerPage; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public List<Plan> getPagePlanList() { return pagePlanList; } public void setPagePlanList(List<Plan> pagePlanList) { this.pagePlanList = pagePlanList; } public int getPlanNum() { return planNum; } public void setPlanNum(int planNum) { this.planNum = planNum; } }
9.showpage.jsp
<%@ page contentType="text/html; charset=utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <% request.setCharacterEncoding("utf-8"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK" /> <link href="../css/common.css" mce_href="css/common.css" rel="stylesheet" type="text/css" /> <link href="../../css/css.css" mce_href="css/css.css" rel="stylesheet" type="text/css"> <mce:style type="text/css"><!-- .none { border-color:#FFFFFF; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; } .style1 {color: #0000FF} .style2 {color: #FF0000} --></mce:style><style type="text/css" mce_bogus="1">.none { border-color:#FFFFFF; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; } .style1 {color: #0000FF} .style2 {color: #FF0000}</style> <mce:script language="javascript" src="../js/edit.js" mce_src="js/edit.js" /><!-- <script language="javascript" src="../js/prototype-1.6.0.3.js" mce_src="js/prototype-1.6.0.3.js" /> <script language="javascript"> function cClose(){ parent.window.close(); } // --></mce:script> </head> <body> <table id="nav" width="850" border="0" cellpadding="0" cellspacing="0" height="30"> <tr> <td> 您现在的位置: <strong> 修改计划</strong> <s:property value="message"/></td> </tr> </table> <form name="form1" id="form1" action="" method="get"> <font color="red"> <ww:property value="#session.msg"/></font> <table border="1" cellspacing="0" cellpadding="0" bordercolor="#999999" > <tr bgcolor="#DDDDDD"> <td width="40" height="30"><div align="center"><strong>选择</strong></div></td> <td width="150" ><div align="center"><strong>计划编号</strong></div></td> <td width="150"><div align="center"><strong>物资编码(8位)</strong></div></td> <td width="200"><div align="center"><strong>物资名称</strong></div></td> <td width="300"><div align="center"><strong>需求单位</strong></div></td> </tr> </table> <table border="0"> <% int i=1; %> <s:iterator value="pagePlanList"> <%if (i==1){ %> <tr bgcolor="rgb(214,223,247)"><%i=0;}else {i=1; %><tr bgcolor="rgb(122,161,230)"><%} %> <td width="37" height="30"><div align="center"><input type="radio" name="selectContract" value="<s:property value="planId" />" /></div></td> <td width="148" ><div align="center" ><a href="editPlan.action?planId=<s:property value=" mce_href="editPlan.action?planId=<s:property value="planId" ></a>"><s:property value="planId" /><a></a></div></td> <td width="148"><div align="center"><s:property value="materialId" /></div></td> <td width="198"><div align="center"><s:property value="materialName" /></div></td> <td width="300"><div align="center"><s:property value="demandDepartment" /></div></td> </tr> </s:iterator> </table> <table width="850" border="0" cellpadding="0" cellspacing="0"> <tr> <td bgcolor="E3E3E3" class="wang" align="center"> <span class="x2" align="center"> <font color="#0072BC"><b> 当前第<s:property value="page"/> 页,共<s:property value="planNum"/>条记录, 共分<s:property value="totalPage"/>页</b></font> </span> </td> </tr> <input type="hidden" name="maxNum" value=""> <tr align="center" valign="top" > <td height="20"> <p align="center"> <span class="x2"><a href="showEditPlan.action?page=1" mce_href="showEditPlan.action?page=1">首 页</a> <s:if test="page<=1"> 上一页<img src="../images/aleft.gif" mce_src="images/aleft.gif" width="18" height="16" border="0" align="absbottom"> </s:if> <s:else> <a href="showEditPlan.action?page=<s:property value=" mce_href="showEditPlan.action?page=<s:property value="page-1"></a>">上一页 <img src="../images/aleft.gif" mce_src="images/aleft.gif" width="18" height="16" border="0" align="absbottom"></a> </s:else> <s:if test="page>=totalPage"> <img src="../images/aright.gif" mce_src="images/aright.gif" width="18" height="16" border="0" align="absbottom">下一页 </s:if> <s:else> <a href="showEditPlan.action?page=<s:property value=" mce_href="showEditPlan.action?page=<s:property value="page+1"></a>"> <img src="../images/aright.gif" mce_src="images/aright.gif" width="18" height="16" border="0" align="absbottom">下一页</a> </s:else> <a href="showEditPlan.action?page=<s:property value=" mce_href="showEditPlan.action?page=<s:property value="totalPage"></a>">最后一页</a> </span> </p> </td> </tr> </table> <hr width="850" align="left"/> <table width="100%"> <tr bgcolor="#ffffff"> <td align="center" > <input type="hidden" value="" id="pId" name="pId"/> <input type="submit" value="查看" style="width:70px" onClick="return rCheck()" /> <input type="button" value="关闭" style="width:70px" onClick="cClose()" /> </td> </tr> </table> </form> </body> </html>
PS:由于没有把CSS,JS等代码粘上来可能此实例不能直接使用,但核心代码以写了出来(PlanDaoImpl.java)
大家可以参考参考,如果有什么不明白的地方可以留言