Struts2+Hibernate实现数据分页的方法

作者:TKD03072010 时间:2022-10-28 05:31:13 

本文实例讲述了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.分页结果:

Struts2+Hibernate实现数据分页的方法

本文章未提供底层数据库中的实现,但只要掌握分页原理,相信这问题不大。具体分页原理可参照前面一篇:《Hibernate框架数据分页技术实例分析》

希望本文所述对大家基于Hibernate框架的Java程序设计有所帮助。

标签:Struts2,Hibernate,分页
0
投稿

猜你喜欢

  • java 获取日期的几天前,几个月前和几年前的实例

    2023-05-20 15:29:53
  • Java使用动态规划算法思想解决背包问题

    2022-12-02 03:53:49
  • Android开发使用自定义View将圆角矩形绘制在Canvas上的方法

    2021-06-08 01:03:17
  • java判断中文字符串长度的简单实例

    2022-12-19 09:00:26
  • 详解Springboot之Logback的使用学习

    2023-08-11 23:51:12
  • Java中String的JdbcTemplate连接SQLServer数据库的方法

    2022-09-05 00:34:12
  • JAVA垃圾收集器与内存分配策略详解

    2023-05-20 16:33:20
  • Java RandomAccessFile的用法详解

    2021-12-22 01:19:40
  • C#实现DataTable映射成Model的方法(附源码)

    2023-03-12 06:10:56
  • C# FileStream文件读写详解

    2021-10-27 15:44:14
  • 如何使用Spring AOP的通知类型及创建通知

    2022-03-19 19:32:51
  • unity中点击某一个按钮播放某一个动作的操作

    2023-12-01 04:38:05
  • Android自定义TextView跑马灯效果

    2023-08-07 01:14:57
  • c#中多线程访问winform控件的若干问题小结

    2023-09-23 17:04:27
  • 深入理解Java虚拟机 JVM 内存结构

    2022-05-01 20:49:57
  • Java PDF 添加数字签名的实现方法

    2022-01-03 04:05:56
  • 详解Android Service与Activity之间通信的几种方式

    2023-10-26 04:15:48
  • Groovy动态语言使用教程简介

    2022-04-28 15:05:54
  • Android 去掉状态栏的方法汇总

    2022-05-25 01:31:18
  • Android仿微信二维码和条形码

    2021-09-02 03:46:22
  • asp之家 软件编程 m.aspxhome.com