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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值