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

 更新时间:2016年03月24日 10:39:51   作者:TKD03072010  
这篇文章主要介绍了Struts2+Hibernate实现数据分页的方法,结合实例形式分析了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.分页结果:

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

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

相关文章

  • Nacos入门过程的坑--获取不到配置的值问题

    Nacos入门过程的坑--获取不到配置的值问题

    这篇文章主要介绍了Nacos入门过程的坑--获取不到配置的值问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java中将base64编码字符串转换为图片的代码

    Java中将base64编码字符串转换为图片的代码

    这篇文章主要介绍了Java中将base64编码字符串转换为图片,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • packages思维及使用Java添加Android平台特定实现

    packages思维及使用Java添加Android平台特定实现

    这篇文章主要为大家介绍了packages思维及使用Java添加Android平台特定实现在Flutter框架里的体现和运用详解,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Java递归读取文件例子_动力节点Java学院整理

    Java递归读取文件例子_动力节点Java学院整理

    本文通过一段示例代码给大家介绍了java递归读取文件的方法,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-05-05
  • idea中lombok的用法

    idea中lombok的用法

    lombok是开源的代码生成库,是一款非常实用的小工具,在更改实体类时只需要修改属性即可,减少了很多重复代码的编写工作,今天小编给大家介绍idea中lombok的用法,感兴趣的朋友一起看看吧
    2021-12-12
  • Android中几种图片特效的处理的实现方法

    Android中几种图片特效的处理的实现方法

    这篇文章主要介绍了 Android中几种图片特效的处理的实现方法的相关资料,这里有放大缩小图片,获得圆角图片,获得带倒影图片的几种方法,需要的朋友可以参考下
    2017-08-08
  • springBoot集成redis(jedis)的实现示例

    springBoot集成redis(jedis)的实现示例

    Redis是我们Java开发中,使用频次非常高的一个nosql数据库,本文主要介绍了springBoot集成redis(jedis)的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Spring Boot 2.4配置特定环境时spring: profiles提示被弃用的原因分析

    Spring Boot 2.4配置特定环境时spring: profiles提示被弃用的原

    这篇文章主要介绍了Spring Boot 2.4配置特定环境时spring: profiles提示被弃用的原因,本文给大家分享详细解决方案,需要的朋友可以参考下
    2023-04-04
  • Spring扩展点之BeanFactoryPostProcessor详解

    Spring扩展点之BeanFactoryPostProcessor详解

    这篇文章主要介绍了Spring扩展点之BeanFactoryPostProcessor详解,Spring的设计非常优雅,有很多的扩展点供我们对项目进行扩展,今天学习一下Spring其中扩展点之一的BeanFactoryPostProcessor,需要的朋友可以参考下
    2023-11-11
  • Java使用设计模式中的工厂方法模式实例解析

    Java使用设计模式中的工厂方法模式实例解析

    当系统准备为用户提供某个类的子类的实例,又不想让用户代码和该子类形成耦合时,就可以使用工厂方法模式来设计系统.工厂方法模式的关键是在一个接口或抽象类中定义一个抽象方法,下面我们会具体介绍Java使用设计模式中的工厂方法模式实例解析.
    2016-05-05

最新评论