在拜读了各位大牛的博客后,加以修改和添加总算是借鉴出了一个可行的分页实现。(●'◡'●)

话不多说,先贴两张效果图吧

接下来是实现代码:

pagingDAOImpl.java

public class pagingDAOImpl implements pagingDAO{

        public List<PagingTest> getPerPageList(String hql, int firstResult, int pageSize)
{
Session session = HibernateSessionFactory.getSession();
Transaction tx = null;
List<PagingTest> list = null; try
{
tx = session.beginTransaction(); Query query = session.createQuery(hql).setFirstResult(firstResult).setMaxResults(pageSize); list = query.list(); tx.commit(); }
catch (Exception e)
{
if(tx != null)
{
tx.rollback();
} e.printStackTrace();
}
finally
{
session.close();
} return list;
} @Override
public int getTotalRows(String hql) {
Session session = HibernateSessionFactory.getSession();
Transaction tx = null;
int totalRows = 0;
try
{
tx = session.beginTransaction(); Query query = session.createQuery(hql); totalRows = query.list().size(); tx.commit(); }
catch (Exception e)
{
if(tx != null)
{
tx.rollback();
} e.printStackTrace();
}
finally
{
session.close();
} return totalRows;
}
}

pagingServiceImpl.java

public class pagingServiceImpl implements pagingService {
private pagingDAO pagingDAO = new pagingDAOImpl(); /**
* pageSize为每页显示的记录数
* page为当前显示的网页
*/ public PageBean getPageBean(int pageSize, int page)
{
PageBean pageBean = new PageBean(); String hql = "from PagingTest"; int totalRows = pagingDAO.getTotalRows(hql); int totalPage = pageBean.getTotalPages(pageSize, totalRows); int currentPage = pageBean.getCurPage(page); int firstResult = pageBean.getCurrentPageFirstResult(pageSize, currentPage); List<PagingTest> list = pagingDAO.getPerPageList(hql, firstResult, pageSize); pageBean.setList(list);
pageBean.setTotalRows(totalRows);
pageBean.setCurrentPage(currentPage);
pageBean.setTotalPage(totalPage); return pageBean;
}
}

PageBean.java

public class PageBean
{
private List<PagingTest> list; //通过hql从数据库分页查询出来的list集合 private int totalRows; //总记录数 private int totalPage; //总页数 private int currentPage; //当前页 public List<PagingTest> getList()
{
return list;
} public void setList(List<PagingTest> list)
{
this.list = list;
} public int getTotalRows()
{
return totalRows;
} public void setTotalRows(int totalRows)
{
this.totalRows = totalRows;
} 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 totalRows 总记录数
* @return 总页数
*/
public int getTotalPages(int pageSize, int totalRows)
{
int totalPage = (totalRows % pageSize == 0)? (totalRows / pageSize): (totalRows / pageSize) + 1; return totalPage;
} /**
* 得到当前开始记录号
* @param pageSize 每页记录数
* @param currentPage 当前页
* @return
*/
public int getCurrentPageFirstResult(int pageSize, int currentPage)
{
int firstResult = pageSize * (currentPage - 1); return firstResult;
} /**
* 得到当前页, 如果为0 则开始第一页,否则为当前页
* @param page
* @return
*/
public int getCurPage(int page)
{
int currentPage = (page == 0)? 1: page; return currentPage;
} }

PagingAction.java

public class PagingAction extends ActionSupport
{
private pagingService pagingService = new pagingServiceImpl(); 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 = pagingService.getPageBean(5, page); ActionContext context=ActionContext.getContext();
Map session=context.getSession(); session.put("pageBean", pageBean); return SUCCESS;
}
public static void main(String[] args) { }
}

以上就是功能实现的相关代码,至于dao,service,HibernateSessionFactory之类的文件就不贴上来了,上面的代码才是精华!

基于struts2和hibernate的分页实现的更多相关文章

  1. struts2+spring+hibernate 实现分页

    在这里要感谢下这位博友发表的博文 http://www.blogjava.net/rongxh7/archive/2008/11/29/243456.html 通过对他代码的阅读,从而自己实现了网页分 ...

  2. 基于struts2和hibernate的登录和注册功能——完整实例

    1.该项目使用MySQL数据库,数据库名为test,表名info,如图所示: 2.配置web.xml(Struts2使用) <?xml version="1.0" encod ...

  3. 基于struts2、hibernate、spring、shiro、MySQL的项目开发

    使用maven管理jar包的依赖 < project xmlns = “ http://maven.apache.org/POM/4.0.0 ” xmlns :xsi = “ http://ww ...

  4. 基于Maven的S2SH(Struts2+Spring+Hibernate)框架搭建

    1. 前言 基于Maven的开发方式开发项目已经成为主流.Maven能很好的对项目的层次及依赖关系进行管理.方便的解决大型项目中复杂的依赖关系.S2SH(Struts2+Spring+Hibernat ...

  5. SSH面试题(struts2+Spring+hibernate)

    struts2 + Spring +hibernate Hibernate工作原理及为什么要用?   原理:   1.读取并解析配置文件   2.读取并解析映射信息,创建SessionFactory ...

  6. 粗浅看Struts2和Hibernate框架

    ----------------------------------------------------------------------------------------------[版权申明: ...

  7. struts2、hibernate的知识点

    以下内容是我在复习struts2.hibernate和spring的时候记下得到,部分书上找不到的内容来自网络 以下是网络部分的原文网站: http://blog.csdn.net/frankaqi/ ...

  8. Struts2 + Spring + Hibernate 通用 Service 和 DAO

    我在 Struts2 + Spring + Hibernate  项目开发中总结出了一个Service 和 DAO ,可以用于处理任何的pojo(bean).使用这两个Service 和 DAO 可以 ...

  9. SSH(Struts2+Spring+Hibernate)框架搭建流程

    添加支持 我先介绍的是MyEclipse9的自带框架支持搭建过程:(完全的步骤 傻瓜式的学习..~) 首先我们来搭建一个Web项目: 一.Hibernate(数据层)的搭建: 相关描述 Ⅰ.服务器与数 ...

随机推荐

  1. WPF中运行时使内容可以上下左右被鼠标拖动应该怎么做?

    <Window x:Class="testGridSplitter.MainWindow" xmlns="http://schemas.microsoft.com/ ...

  2. C语言中,头文件和源文件的关系(转)

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...

  3. Top 命令详解

    Top 命令详解 先感受一下top命令的执行结果吧!哈哈-- top - 17:32:34 up 3 days, 8:04, 5 users, load average: 0.09, 0.12, 0. ...

  4. there's no qt version assigned to this project for platform

    VS+Qt编译一个新建的项目报there's no qt version assigned to this project for platform xxx的错误. 解决方案: 打开Qt_vs_add ...

  5. Python爬虫进阶二之PySpider框架安装配置

    关于 首先,在此附上项目的地址,以及官方文档 PySpider 官方文档 安装 1. pip 首先确保你已经安装了pip,若没有安装,请参照 pip安装 2. phantomjs PhantomJS ...

  6. Win10 UI入门 圆形控件

    动态模版绑定 http://blog.csdn.net/XXChen2/article/details/4552554

  7. (UWP开发)在ListView中通过向右滑动展开汉堡菜单

    首先在移动APP开发中,手势滑动已经成为一个必备的技能,无论大大小小的APP都需要拥有手势滑动功能.在Android和iOS操作系统的APP中,手势滑动比较普及.然而由于国内有关UWP应用的教程比较少 ...

  8. Shell_3 函数

    1 函数 函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. 函数返回值,可以显式增加r ...

  9. VBA实例收集

    1.工作表事件:固定制定区域激活,使之不能选择其他区域. Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target. ...

  10. 【转】TCP协议

    TCP是什么? TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的.可靠的. 基于IP的传输层协议.TCP在IP报文的协议号是6.TCP是一 ...