想着每天能学个新东西,今天准备了这个hibernate+struts2实现页面的分页功能,以下是源代码。

1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法:
public interface PersonDAO
{
public List<Person> queryByPage(String hql, int offset, int pageSize);
public int getAllRowCount(String hql);
}
2.DAO层接口的实现类PersonDAOImpl类,将其两个方法实现出来:
public class PersonDAOImpl implements PersonDAO
{
/**
* 通过hql语句得到数据库中记录总数
*/
@Override
public int getAllRowCount(String hql)
{
Session session = HibernateUtil.openSession();
Transaction tx = null;
int allRows = 0;
try
{
tx = session.beginTransaction();
Query query = session.createQuery(hql);
allRows = query.list().size();
tx.commit();
}
catch (Exception e)
{
if(tx != null)
{
tx.rollback();
}
e.printStackTrace();
}
finally
{
HibernateUtil.closeSession(session);
}
return allRows;
}
/**
* 使用hibernate提供的分页功能,得到分页显示的数据
*/
@SuppressWarnings("unchecked")
@Override
public List<Person> queryByPage(String hql, int offset, int pageSize)
{
Session session = HibernateUtil.openSession();
Transaction tx = null;
List<Person> list = null;
try
{
tx = session.beginTransaction();
Query query = session.createQuery(hql).setFirstResult(offset).setMaxResults(pageSize);
list = query.list();
tx.commit();
}
catch (Exception e)
{
if(tx != null)
{
tx.rollback();
}
e.printStackTrace();
}
finally
{
HibernateUtil.closeSession(session);
}
return list;
}
}
3.定义了一个PageBean(每一页所需要的内容都存放在这个PageBean里面),里面用来存放网页每一页显示的内容:
public class PageBean
{
private List<Person> list; //通过hql从数据库分页查询出来的list集合
private int allRows; //总记录数
private int totalPage; //总页数
private int currentPage; //当前页
public List<Person> getList()
{
return list;
}
public void setList(List<Person> list)
{
this.list = list;
}
public int getAllRows()
{
return allRows;
}
public void setAllRows(int allRows)
{
this.allRows = allRows;
}
public int getTotalPage()
{
return totalPage;
}
public void setTotalPage(int totalPage)
{
this.totalPage = totalPage;
}
public int getCurrentPage()
{
return currentPage;
}
public void setCurrentPage(int currentPage)
{
this.currentPage = currentPage;
}
/**
* 得到总页数
* @param pageSize 每页记录数
* @param allRows 总记录数
* @return 总页数
*/
public int getTotalPages(int pageSize, int allRows)
{
int totalPage = (allRows % pageSize == 0)? (allRows / pageSize): (allRows / pageSize) + 1;
return totalPage;
}
/**
* 得到当前开始记录号
* @param pageSize 每页记录数
* @param currentPage 当前页
* @return
*/
public int getCurrentPageOffset(int pageSize, int currentPage)
{
int offset = pageSize * (currentPage - 1);
return offset;
}
/**
* 得到当前页, 如果为0 则开始第一页,否则为当前页
* @param page
* @return
*/
public int getCurPage(int page)
{
int currentPage = (page == 0)? 1: page;
return currentPage;
}
}
4.Service层接口设计,定义一个PersonService接口,里面声明了一个方法,返回一个PageBean:
public interface PersonService
{
public PageBean getPageBean(int pageSize, int page);
}
5.Service层接口实现类PersonServiceImpl类,实现唯一的方法:
public class PersonServiceImpl implements PersonService
{
private PersonDAO personDAO = new PersonDAOImpl();
/**
* pageSize为每页显示的记录数
* page为当前显示的网页
*/
@Override
public PageBean getPageBean(int pageSize, int page)
{
PageBean pageBean = new PageBean();
String hql = "from Person";
int allRows = personDAO.getAllRowCount(hql);
int totalPage = pageBean.getTotalPages(pageSize, allRows);
int currentPage = pageBean.getCurPage(page);
int offset = pageBean.getCurrentPageOffset(pageSize, currentPage);
List<Person> list = personDAO.queryByPage(hql, offset, pageSize);
pageBean.setList(list);
pageBean.setAllRows(allRows);
pageBean.setCurrentPage(currentPage);
pageBean.setTotalPage(totalPage);
return pageBean;
}
}
6.Action层设计,定义一个PersonAction:
public class PersonAction extends ActionSupport
{
private PersonService personService = new PersonServiceImpl();
private int page;
public int getPage()
{
return page;
}
public void setPage(int page)
{
this.page = page;
}
@Override
public String execute() throws Exception
{
//表示每页显示5条记录,page表示当前网页
PageBean pageBean = personService.getPageBean(5, page);
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("pageBean", pageBean);
return SUCCESS;
}
}
7.辅助类设计,HibernateUtil:
public class HibernateUtil
{
private static SessionFactory sessionFactory;
static
{
sessionFactory = new Configuration().configure().buildSessionFactory();
}
public static Session openSession()
{
Session session = sessionFactory.openSession();
return session;
}
public static void closeSession(Session session)
{
if(session != null)
{
session.close();
}
}
}
8.最后也就是分页页面显示pagePerson.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'pagePerson.jsp' starting page</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">
<script type="text/javascript">
function validate()
{
var page = document.getElementsByName("page")[0].value;
if(page > <s:property value="#request.pageBean.totalPage"/>)
{
alert("你输入的页数大于最大页数,页面将跳转到首页!");
window.document.location.href = "personAction";
return false;
}
return true;
}
</script>
</head>
<body>
<h1><font color="blue">分页查询</font></h1><hr>
<table border="1" align="center" bordercolor="yellow" width="50%">
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<s:iterator value="#request.pageBean.list" id="person">
<tr>
<th><s:property value="#person.id"/></th>
<th><s:property value="#person.name"/></th>
<th><s:property value="#person.age"/></th>
</tr>
</s:iterator>
</table>
<center>
<font size="5">共<font color="red"><s:property value="#request.pageBean.totalPage"/></font>页 </font>
<font size="5">共<font color="red"><s:property value="#request.pageBean.allRows"/></font>条记录</font><br><br>
<s:if test="#request.pageBean.currentPage == 1">
首页 上一页
</s:if>
<s:else>
<a href="personAction.action">首页</a>
<a href="personAction.action?page=<s:property value="#request.pageBean.currentPage - 1"/>">上一页</a>
</s:else>
<s:if test="#request.pageBean.currentPage != #request.pageBean.totalPage">
<a href="personAction.action?page=<s:property value="#request.pageBean.currentPage + 1"/>">下一页</a>
<a href="personAction.action?page=<s:property value="#request.pageBean.totalPage"/>">尾页</a>
</s:if>
<s:else>
下一页 尾页
</s:else>
</center><br>
<center>
<form action="personAction" onsubmit="return validate();">
<font size="4">跳转至</font>
<input type="text" size="2" name="page">页
<input type="submit" value="跳转">
</form>
</center>
</body>
</html>
至此,hibernate+struts2实现网页分页功能代码部分就完毕了,像hibernate与struts的配置文件就不列出来了,那些都不是重点!
页面效果如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# struts2实现分页
# hibernate实现分页
# struts2
# hibernate分页
# Java框架篇:Spring+SpringMVC+hibernate整合开发
# Hibernate缓存详解
# java Hibernate多对多映射详解及实例代码
# 浅谈SpringMVC+Spring3+Hibernate4开发环境搭建
# Java Hibernate对象(瞬时态
# 持久态
# 脱管态)详解
# Spring与Hibernate整合事务管理的理解
# Maven 搭建SpringMVC+Hibernate项目详解
# Java的Hibernate框架中复合主键映射的创建和使用教程
# Java的Hibernate框架结合MySQL的入门学习教程
# 详解Hibernate cascade级联属性的CascadeType的用法
# 分页
# 每页
# 首页
# 下一页
# 上一页
# 当前页
# 尾页
# 跳转
# 来了
# 在这个
# 就不
# 将其
# 所需要
# 第一页
# 则为
# 数据库中
# 配置文件
# 源代码
# 大家多多
# 跳转到
相关文章:
头像制作网站在线制作软件,dw网页背景图像怎么设置?
香港服务器租用每月最低只需15元?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
如何配置FTP站点权限与安全设置?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
创业网站制作流程,创业网站可靠吗?
如何配置IIS站点权限与局域网访问?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
建站之星上传入口如何快速找到?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
公司网站的制作公司,企业网站制作基本流程有哪些?
如何零基础在云服务器搭建WordPress站点?
如何注册花生壳免费域名并搭建个人网站?
,如何利用word制作宣传手册?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
设计网站制作公司有哪些,制作网页教程?
建设网站制作价格,怎样建立自己的公司网站?
IOS倒计时设置UIButton标题title的抖动问题
如何快速搭建FTP站点实现文件共享?
如何快速启动建站代理加盟业务?
建站主机是否等同于虚拟主机?
制作证书网站有哪些,全国城建培训中心证书查询官网?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
h5网站制作工具有哪些,h5页面制作工具有哪些?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
制作网站公司那家好,网络公司是做什么的?
建站之星云端配置指南:模板选择与SEO优化一键生成
如何获取PHP WAP自助建站系统源码?
高防服务器租用指南:配置选择与快速部署攻略
建站之星微信建站一键生成小程序+多端营销系统
建站之星IIS配置教程:代码生成技巧与站点搭建指南
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
常州企业建站如何选择最佳模板?
C#如何序列化对象为XML XmlSerializer用法
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何快速搭建支持数据库操作的智能建站平台?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
学校为何禁止电信移动建设网站?
制作公司内部网站有哪些,内网如何建网站?
建站之星客服服务时间及联系方式如何?
Android使用GridView实现日历的简单功能
建站之星ASP如何实现CMS高效搭建与安全管理?
青岛网站建设如何选择本地服务器?
如何在Windows服务器上快速搭建网站?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
西安专业网站制作公司有哪些,陕西省建行官方网站?
制作表格网站有哪些,线上表格怎么弄?
*请认真填写需求信息,我们会在24小时内与您取得联系。