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

前端技术 2023/09/05 Java

本文实例讲述了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程序设计有所帮助。

本文地址:https://www.stayed.cn/item/12702

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。