知识大全 浅谈Struts分页中的Hibernate如何实现

Posted

篇首语:幽沉谢世事,俯默窥唐虞。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 浅谈Struts分页中的Hibernate如何实现相关的知识,希望对你有一定的参考价值。

浅谈Struts分页中的Hibernate如何实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在进行web应用开发的时候经常要对Struts分页处理 经常看到一些人在问Struts分页处理的问题 现在我把自己的处理方法写在这儿 希望能对需要进行Struts分页处理的朋友有所帮助

  一 在Struts分页有两种结构

   在Action中通过DAO查询出所有的记录 然后加到session或request对象中 传到客户端 由JSP进行分页

  这种方法对于在数据量少的时候很方便 也不影响速度

   在Action中每次通过DAO只查询出一页的记录 再传给JSP页面

  这种结构对于数据量大的程序很好 但对于数据量小的情况 会增加对服务器的请求 加大服务器的负载

  二 Hibernate查询

  由于在Hibernate中直接提供了对数据库定点定量的查询方法 所以我采用的是第 种方法

  如

  从第 万条开始取出 条记录

  

  Query q = session createQuery( from Cat as c );

  q setFirstResult( );

  q setMaxResults( );

  List l = q list();

  三 具体实现

   Pager类

  

  

  package jpcf db helper;

  import java math *;

  public class Pager

  private int totalRows; //总行数

  private int pageSize = ; //每页显示的行数

  private int currentPage; //当前页号

  private int totalPages; //总页数

  private int startRow; //当前页在数据库中的起始行

  public Pager()

  

  public Pager(int _totalRows)

  totalRows = _totalRows;

  totalPages=totalRows/pageSize;

  int mod=totalRows%pageSize;

  if(mod> )

  totalPages++;

  

  currentPage = ;

  startRow = ;

  

  public int getStartRow()

  return startRow;

  

  public int getTotalPages()

  return totalPages;

  

  public int getCurrentPage()

  return currentPage;

  

  public int getPageSize()

  return pageSize;

  

  public void setTotalRows(int totalRows)

  this totalRows = totalRows;

  

  public void setStartRow(int startRow)

  this startRow = startRow;

  

  public void setTotalPages(int totalPages)

  this totalPages = totalPages;

  

  public void setCurrentPage(int currentPage)

  this currentPage = currentPage;

  

  public void setPageSize(int pageSize)

  this pageSize = pageSize;

  

  public int getTotalRows()

  return totalRows;

  

  public void first()

  currentPage = ;

  startRow = ;

  

  public void previous()

  if (currentPage == )

  return;

  

  currentPage ;

  startRow = (currentPage ) * pageSize;

  

  public void next()

  if (currentPage < totalPages)

  currentPage++;

  

  startRow = (currentPage ) * pageSize;

  

  public void last()

  currentPage = totalPages;

  startRow = (currentPage ) * pageSize;

  

  public void refresh(int _currentPage)

  currentPage = _currentPage;

  if (currentPage > totalPages)

  last();

  

  

  Pager类用于计算首页 前一页 下一页 尾页的在数据库中的起始行 当前的页码

   PagerHelp类

  

  

  package jpcf db helper;

  import javax servlet *;

  public class PagerHelper

  public static Pager getPager(HttpServletRequest ServletRequest

  int totalRows)

  //定义pager对象 用于传到页面

  Pager pager = new Pager(totalRows);

  //从Request对象中获取当前页号

  String currentPage = ( currentPage );

  //如果当前页号为空 表示为首次查询该页

  //如果不为空 则刷新pager对象 输入当前页号等信息

  if (currentPage != null)

  pager refresh(Integer parseInt(currentPage));

  

  //获取当前执行的方法 首页 前一页 后一页 尾页

  String pagerMethod = ( pageMethod );

  if (pagerMethod != null)

  if (pagerMethod equals( first ))

  pager first();

   else if (pagerMethod equals( previous ))

  pager previous();

   else if (pagerMethod equals( next ))

  pager next();

   else if (pagerMethod equals( last ))

  pager last();

  

  

  return pager;

  

  PageHelper这个类 我不用说应该也知道用来干嘛了

   DAO类

  

  

  package jpcf db dao;

  import jpcf db model *;

  import jpcf db helper HibernateUtil;

  import net sf hibernate *;

  import java util *;

  import ntroller *;

  public class VehiclePropertyDAO

  public Collection findWithPage(int pageSize int startRow) throws

  HibernateException

  Collection vehicleList = null;

  Transaction tx = null;

  try

  Session session = HibernateUtil currentSession();

  tx = session beginTransaction();

  Query q = session createQuery( from VehicleProperty vp );

  q setFirstResult(startRow);

  q setMaxResults(pageSize);

  vehicleList = q list();

  mit();

   catch (HibernateException he)

  if (tx != null)

  tx rollback();

  

  throw he;

   finally

  HibernateUtil closeSession();

  

  return vehicleList;

  

  public int getRows(String query) throws

  HibernateException

  int totalRows = ;

  Transaction tx = null;

  try

  Session session = HibernateUtil currentSession();

  tx = session beginTransaction();

  totalRows = ((Integer) erate(query) next())

  intValue();

  mit();

   catch (HibernateException he)

  if (tx != null)

  tx rollback();

  

  throw he;

   finally

  HibernateUtil closeSession();

  

  return totalRows;

  

  DAO类我就贴这些分页需要的代码了

   from VehicleProperty vp 也可以用一个参数传进来 有兴趣的自己改一下吧

   Action

  下面是在Action中用到的代码 /

  

  

  public ActionForward queryWithPage(ActionMapping actionMapping

  ActionForm actionForm

  HttpServletRequest ServletRequest

  HttpServletResponse Servletresponse)

  Collection clInfos = null;//用于输出到页面的记录集合

  int totalRows;//记录总行数

  VehiclePropertyDAO vehicleDAO = new VehiclePropertyDAO();

  //取得当前表中的总行数

  try

  totalRows = vehicleDAO getRows( select count(*) from VehicleProperty );

   catch (Exception ex)

  servlet log(ex toString());

  return actionMapping findForward(Constants FAILURE);

  

  //通过PagerHelper类来获取用于输出到页面的pager对象

  Pager pager=PagerHelper getPager(ServletRequest totalRows);

  //取出从startRow开始的pageSize行记录

  try

  clInfos = vehicleDAO findWithPage(pager getPageSize() pager getStartRow());

   catch (Exception ex)

  servlet log(ex toString());

  return actionMapping findForward(Constants FAILURE);

  

  //把输出的记录集和pager对象保存到request对象中

  ( CLINFOS clInfos);

  ( PAGER pager);

  return actionMapping findForward(Constants SUCCESS);

  查询语句select count(*) from VehicleProperty 也可以换成你需要的任意的条件(select count(*) from VehicleProperty where )

   JSP页面使用

  下面就是在JSP中的应用了  

  

  = /bussiness/clInfo/queryWithPage do?method=queryWithPage&pageMethod=first

   paramName= PAGER paramProperty= currentPage paramId= currentPage >首页

  解释一下这一行: /bussiness/clInfo/queryWithPage do?method=queryWithPage&pageMethod=first

  

  method=queryWithPage

是由于我的Action继承的是DispatchAction 需要一个method参数

  pageMethod=first 是用来在PageHelper类中判断执行哪个操作

  Struts分页总结

  我做的这个也只是一个借鉴 还有很多没有实现的 比如还可以加一下 go 直接到第n页的功能

cha138/Article/program/Java/ky/201311/28681

相关参考

知识大全 浅谈Struts2分页的实现与代码实例

浅谈Struts2分页的实现与代码实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  关于Str

知识大全 基于hibernate的开源通用查询框架-bba96

  bba框架当前版本包含  bbacore核心框架封装HibernateCriteria提供方便的查询以及分页支持查询参数  bbastruts基于Struts的开发框架依赖core提供便捷的CRU

知识大全 漫谈解决Struts分页显示

漫谈解决Struts分页显示  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  学习Struts已经

知识大全 Hibernate分页的设计和编码

Hibernate分页的设计和编码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当前页码的表单

知识大全 struts开发实践—分页的实现

  本案主要功能是完成数据集的分页显示示例代码如下    PageInfo类定义分页信息  /******************programbegin***********************

知识大全 如何用 Hibernate 实现分页查询

如何用Hibernate实现分页查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  例如  从第

知识大全 我的struts分页算法的实现

  说到分页算法一般WEB开发都会用到我只是在我的实现技术上用了struts框架其实原理都一样的看了网上相当多的分页算法有对的也有好多是错的更有好多是不太优化的还有以前自己在augmentum做的一个

知识大全 Struts2分页实现源码

Struts2分页实现源码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 一个高效简洁的Struts分页方法

一个高效简洁的Struts分页方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在网上看了几个

知识大全 Struts 中如何实现查询结果分页显示

Struts中如何实现查询结果分页显示  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  messa