Struts2+Hibernate实现数据分页的方法
作者:TKD03072010 发布时间:2022-10-28 05:31:13
标签: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程序设计有所帮助。


猜你喜欢
- 前言:最近对接了一个第三方的项目,该项目的数据传输格式是XML。由于工作多年只有之前在医疗行业的时候有接触过少量数据格式是XML的接口,之后
- eclipse中改变默然的workspace的方法可以有以下几种:1.在创建project的时候,手动选择使用新的workspace,如创建
- 1、如何解决服务之间的通信问题?[1]HTTP REST方式 使用http协议进行数据传递 json格式数据[2]RPC方式 远程过程调用
- public class CrossSum{ public static void main(String args[]){
- 很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。在讨论
- 近来,很多公司的APP都实现了人脸识别登录的功能。今天呢,银鹏带大家从头到尾做一下这个人脸识别登录。首先呢,我们需要采用一个拥有人脸识别算法
- 这篇文章主要介绍了java private关键字用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 1 前言在 Springboot 中,异步任务和定时任务是经常遇到的处理问题方式,为了能够用好这两项配置,不干扰正常的业务,需要对其进行异步
- TableView,算是一个很重要的控件,几乎随处可见,而且功能强大,数据展示效果良好。所以,在JavaFX中,我们自然而然也应该学习一下T
- AOP拦截Controller获取@PathVariable注解传入参数前言:最近项目中需要对controller传入的应用标识(appMa
- 为什么需要网关呢?我们知道我们要进入一个服务本身,很明显我们没有特别好的办法,直接输入IP地址+端口号,我们知道这样的做法很糟糕的,这样的做
- 前言本文主要给大家介绍了关于Spring Boot集成之异步调用Async的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细
- SpringMVC获取表单数据1、实体类package cn.hadron.bean;import java.io.Serializable
- 本文实例讲述了java实现的日期时间转换工具类。分享给大家供大家参考,具体如下:最基础的东西,总结一下,下次用的时候就方便一些了。废话不多说
- 目录1 简介2 项目整合2.1 JWT整合2.1.1 JWT工具类2.1.2 Token处理的Filter2.1.3 JWT属性2.2 Sp
- 在做项目时,需要一个定时任务来接收数据存入数据库,后端再写一个接口来提供该该数据的最新的那一条。数据保持最新:设计字段sign的值(0,1)
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 类和类有关联,将查询的结果注入到对象和对象的关联关系中Mybatis处理的关联关系 包括一对一关联 和 一对多关联 ,例如学生关联班级是一对
- 首先,定义TabHost的布局文件:<?xml version="1.0" encoding="utf-
- 一、参数校验springboot 使用校验框架validation校验方法的入参SpringBoot的Web组件内部集成了hibernate