您现在的位置是:首页 >

在分页存储管理系统中 浅谈Struts分页中的Hibernate如何实现

火烧 2022-04-19 20:58:39 1058
浅谈Strut 分页中的Hi er ate如何实现   在进行we 应用开发的时候经常要对Strut 分页处理 经常看到一些人在问Strut 分页处理的问题 现在我把自己的处理方法写在这儿 希望能对需

浅谈Struts分页中的Hibernate如何实现  

  在进行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();

在分页存储管理系统中 浅谈Struts分页中的Hibernate如何实现

  }

  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页的功能

lishixinzhi/Article/program/Java/ky/201311/28681  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码