Struts2+Hibernate 实现数据分页

Struts2+Hibernate 实现数据分页

1.用Hibernate实现分页技术:

/** 
	 * 使用hql语句进行分页查询 
	 * @param hql 需要查询的hql语句 
	 * @param offset 第一条记录索引 
	 * @param pageSize 每页需要显示的记录数 
	 * @return 当前页的所有记录 
	 */  
	@SuppressWarnings("unchecked")
	public List findByPage(final String hql,   
	    final int offset, final int pageSize)  
	{  
	    //通过一个HibernateCallback对象来执行查询  
	    List list = getHibernateTemplate()  
	        .executeFind(new HibernateCallback()  
	    {  
	        //实现HibernateCallback接口必须实现的方法  
	        public Object doInHibernate(Session session)  
	            throws HibernateException, SQLException  
	        {  
	            //执行Hibernate分页查询  
	            List result = session.createQuery(hql)  
	                .setFirstResult(offset)  
	                .setMaxResults(pageSize)  
	                .list();  
	            return result;  
	        }  
	    });  
	    return list;  
	}  
	
	// 获取总记录数
	public int getRows(String hql) {
		return getHibernateTemplate().find(hql).size();
	}

2.在Action里调用Hibernate实现分页技术的方法,并跳转到显示界面:

    // 分页
    @SuppressWarnings("unchecked")
    public String paging() {
        String hql = "from Income"; // 分页的数据表
        int pageSize = 3; // 每页显示记录的条数
        int allRows = service.getRows(hql); // 记录总数
        int allPage = 0; // 总页数
        int offset = getPage() + 1; // 第一条记录的索引
        /*if (rows % size != 0) {
            pageSize = rows / size + 1;
        } else {
            pageSize = rows / size;
        }*/
        allPage = (allRows - 1) / pageSize + 1; // 计算总页数
        List<Income> income = service.findByPage(hql, (offset-1)*pageSize, pageSize);
        request.setAttribute("allPage", allPage);
        request.setAttribute("offset", offset);
        request.setAttribute("income", income);
        return "paging";
    }

3.struts.xml配置:

	<action name="income" 
			class="com.xqh.action.IncomeAction">
			<!-- 为两个逻辑视图配置视图页面 -->
			<result name="error">/error.jsp</result>
			<result name="paging">/income/income_list.jsp</result>
			<result name="update">/income/income_edit.jsp</result>
		</action>

4.显示界面income_list.jsp

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
	<title>收入列表</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<link rel="stylesheet" type="text/css" href="../images/styles.css">
	
</head>
<body>
	<div class="div1">
		<table width="100%" cellpadding="0" cellspacing="0" border="0"
			align="center">
			<tr>
				<td class="td_title1">
					·当前位置:收入管理>>查看收入
				</td>
			</tr>
			<tr>
				<td bgcolor="#FFFFFF" height="50">
					<br>
					<table border="1" align="center" width="700" cellpadding="1"
						cellspacing="1" bgcolor="#036500" bordercolor="#FFFFF">
						<tr bgcolor="#FFFFFF">
							<td class="tb_tl" align="center">
								收入编号
							</td>
							<td class="tb_tl" align="center">
								日期
							</td>
							<td class="tb_tl" align="center">
								方式 
							</td>
							<td class="tb_tl" align="center">
								金额
							</td>
							<td class="tb_tl" align="center">
								项目
							</td>
							<td class="tb_tl" align="center">
								来源
							</td>
							<td class="tb_tl" align="center">
								人员
							</td>
							<td class="tb_tl" align="center">
								备注
							</td>
							<td class="tb_tl" align="center">
								操作
							</td>
						</tr>
						<s:iterator value="#request.income">
					  		<tr bgcolor="#FFFFFF">
					  			<td align="center"><s:property value="id"/></td>
					  			<td align="center"><s:date name="date" format="yyyy-MM-dd"/></td>
					  			<td align="center"><s:property value="style"/></td>
					  			<td align="center"><s:property value="money"/></td>
					  			<td align="center"><s:property value="project"/></td>
					  			<td align="center"><s:property value="source"/></td>
					  			<td align="center"><s:property value="personnel"/></td>
					  			<td align="center"><s:property value="remarks"/></td>
					  			<td align="center">
					  				<a href="javascript:if(confirm('确定要删除${id}吗?'))location='income!del?id=${id}'">删除</a>
				  					<a href="javascript:if(confirm('确定要修改${id}吗?'))location='income!updateTo?id=${id}'">修改</a>
				  				</td>
					  		</tr>
				  		</s:iterator>
					</table>
					<center>
				  			总共有${allPage}页,	    当前是第${offset}页 
				  			<a href="income!paging?page=0"><font size="2" color="blue">首页</font></a>
							<a href="javascript:if(${offset}>1)location='income!paging?page=${page-1}'"><font size="2" color="red">上一页</font></a>
							<a href="javascript:if(${offset}<${allPage})location='income!paging?page=${page+1}'"><font size="2" color="red">下一页</font></a>
							<a href="income!paging?page=${allPage-1}"><font size="2" color="blue">末页</font></a>
			  		</center>
				</td>
			</tr>
		</table>
	</div>
</body>

5.分页结果:

本文章未提供底层数据库中的实现,但只要掌握分页原理,相信这问题不大。具体分页原理可参照:浅析数据分页技术

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
说明:<br>一、含演示数据库建立脚本(较简单)<br>二、使用StrutsHibernate和display超简单的实现分页,你不用在页面上再写很多<%%>和很多判断,简单到只需要几行语句:<br><html:form method="post" action="/displayList"><br> <display:table name="lst" cellspacing="0" border="1" cellpadding="0" requestURI="displayList.do" export="true"><br> <display:column property="id" title="编号" /><br> <display:column property="name" title="名字" /><br> <display:column property="age" title="年龄" /><br> </display:table><br> <pag:pagination name="pv" requestUri="displayList.do"></pag:pagination><br></html:form><br>这就是全部语句,不用写任何代码。<br>三、由于使用了display,所以自动实现了Excel | XML | CSV 的导出功能。<br>四、生成页面导航的样式是:<br>[首页/前一页] [后一页/尾页] 显示第1到1条 共3项 每页显示2项 共3页 第1页 GO<br>其中每页显示2项中的项操作人员可以随便改,“第1页”中的页号可以随便改,操作相当的灵活。我看到的样式暂只这一种,我想在display中应可以方便的改变导航样式,不行的话你就去修改display的标签源码,想改成什么样就改成什么样。<br><br>心得:<br>一、今天才明白使用Hibernate还有一个好处,你可以随便改数据库,你可以一会用oracle,一会用sqlserver,一会用mysql,总之你写成的代码换一种数据库,最多就是改一下那几个xml文件,个人感觉这才是java一个地方编写到处运行呢。<br>二、明白了使用标签的好处。<br><br>另提示一点:<br>打开测试用“http://localhost:8080/StrutsHibernateDisplay/displayList.do”,如果直接打开list.jsp会告诉你没有数据的。<br><br>代码是wenlong342的,我只是稍做修改,然后写了上面的说明文字。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值