duansky'weblog

统计

留言簿(3)

友情链接

阅读排行榜

评论排行榜

偷窥struts+hibernate分页(第一种方法)

根据原文有点改动。原文忘记在那里看到了。看到提个醒


新建表


DROP   DATABASE   IF   EXISTS  `wjcms`;
CREATE   DATABASE  `wjcms`  /* !40100 DEFAULT CHARACTER SET gb2312  */ ;
USE  `wjcms`;

#
Table  structure  for   table  t_article
#

CREATE   TABLE  `t_article` (
  `a_id` 
int ( 11 NOT   NULL  auto_increment,
  `a_sort` 
int ( 11 NOT   NULL   default   ' 0 ' ,
  `a_title` 
varchar ( 50 default   NULL ,
  `a_body` 
text ,
  `a_author` 
varchar ( 11 default   '' ,
  `a_hit` 
int ( 11 NOT   NULL   default   ' 0 ' ,
  `c_id` 
int ( 11 default   ' 0 ' ,
  `a_date` 
varchar ( 20 default   NULL ,
  
PRIMARY   KEY   (`a_id`)


实体

public class articleVO {
    private int a_id;
    private int a_sort;
    private int a_hit;
    private int c_id;
    private String a_title;
    private String a_body;
    private String a_author;
    private String a_date;
    // getter setter


新建page.java

package  page.dal;

public   class  page {
    
private   int  totalRows;  // 总行数
     private   int  pageSize  =   10 // 每页显示的行数
     private   int  currentPage;  // 当前页号
     private   int  totalPages;  // 总页数
     private   int  startRow;  // 当前页在数据库中的起始行

    
public  page( int  _totalRows) {
     totalRows 
=  _totalRows;
     totalPages
= totalRows / pageSize;
     
int  mod = totalRows % pageSize;
     
if (mod > 0 ){
       totalPages
++ ;
     }
     currentPage 
=   1 ;
     startRow 
=   0 ;
   }

   
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 
=   1 ;
     startRow 
=   0 ;
   }

   
public   void  previous() {
     
if  (currentPage  ==   1 ) {
       
return ;
     }
     currentPage
-- ;
     startRow 
=  (currentPage  -   1 *  pageSize;
   }

   
public   void  next() {
     
if  (currentPage  <  totalPages) {
       currentPage
++ ;
     }
     startRow 
=  (currentPage  -   1 *  pageSize;
   }

   
public   void  last() {
     currentPage 
=  totalPages;
     startRow 
=  (currentPage  -   1 *  pageSize;
   }

   
public   void  refresh( int  _currentPage) {
     currentPage 
=  _currentPage;
     
if  (currentPage  >  totalPages) {
       last();
     }
   }

 }




新建 pageHelp.java

package  page.dal;
import  javax.servlet.http. * ;

public   class  PagerHelp {
    
public   static  page getPager(HttpServletRequest httpServletRequest, int  totalRows) {

     
// 定义pager对象,用于传到页面
     page pager  =   new  page(totalRows);

     
// 从Request对象中获取当前页号
     String currentPage  =  httpServletRequest.getParameter( " currentPage " );

     
// 如果当前页号为空,表示为首次查询该页
     
// 如果不为空,则刷新page对象,输入当前页号等信息
      if  (currentPage  !=   null ) {
       pager.refresh(Integer.parseInt(currentPage));
     }

     
// 获取当前执行的方法,首页,前一页,后一页,尾页。
     String pagerMethod  =  httpServletRequest.getParameter( " 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;
   }

}




新建 util.java

package  page.dal;
import  net.sf.hibernate.Query;
import  net.sf.hibernate.cfg.Configuration;
import  java.util.List;
import  net.sf.hibernate.HibernateException;
import  net.sf.hibernate.SessionFactory;
import  net.sf.hibernate.Session;
import  java.util. * ;
public   class  util {
    
public  util() {
    }
     
private  Session ss = null ;
    
public  Session getSession()
  {
      
//   Configuration config=null;
      SessionFactory sessionFactory;
      
try  {
          Configuration cfg 
=   new  Configuration();
          sessionFactory 
=  cfg.addClass(articleVO. class ).
                           buildSessionFactory();
          
//  SessionFactory sessionFactory=config.buildSessionFactory();
          ss  =  sessionFactory.openSession();
          
return  ss;
      } 
catch  (HibernateException ex) {
          System.out.print(
" getsession出错了。。 "   +  ex.getMessage());
          
return   null ;
      }
  }

  
public   int  getCount()
  {
      String sql
= " select count(*) from articleVO "  ;
      
this .getSession();

    
try  {
     
//  ss.createQuery("select count(a)as cont from articleVO a ");
       int  rows =  ((Integer) ss.iterate(sql).next()).intValue();
      ss.flush();
      
return  rows;

    } 
catch  (HibernateException ex) {
        System.out.print(
" ex:: " + ex.getMessage());
        
return   0 ;
    }


  }

  
public  Collection  getList( int  pagesize, int  currow)  throws  HibernateException {
      Collection vehicleList 
=   null ;
      
this .getSession();
      Query q
= ss.createQuery( " from articleVO " );
      q.setFirstResult(currow);
      q.setMaxResults(pagesize);
      vehicleList
= q.list();
      ss.flush();
      
return  vehicleList;
  }

}



新建 struts  PageAction.java


package  page.dal;

import  org.apache.struts.action.ActionMapping;
import  org.apache.struts.action.ActionForm;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
import  org.apache.struts.action.ActionForward;
import  org.apache.struts.action.Action;
import  page.dal. * ;
import  java.util. * ;
import  net.sf.hibernate. * ;

public   class  pageAction  extends  Action {
    
public  ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) {
        Collection clInfos 
=   null ; // 用于输出到页面的记录集合
         int  totalRows; // 记录总行数
        util dal = new  util();
        totalRows
= dal.getCount();
        System.out.print(
" 总行数== " + totalRows);
        page p
= PagerHelp.getPager(request,totalRows);
        
try  {
            clInfos 
=  dal.getList(p.getPageSize(), p.getStartRow());

        } 
catch  (HibernateException ex) {
            System.out.print(
" action里的错误= " + ex.getMessage());
        }
        request.setAttribute(
" page " ,p);
        request.setAttribute(
" list " ,clInfos);
        
return  mapping.findForward( " page " );
        
// pageForm pageForm = (pageForm) form;
      
//   throw new java.lang.UnsupportedOperationException(
              
//   "Method $execute() not yet implemented.");
    }
}



前台页面

<% @ taglib uri = " /WEB-INF/struts-tiles.tld "  prefix = " tiles "   %>
<% @ taglib uri = " /WEB-INF/struts-nested.tld "  prefix = " nested "   %>
<% @ taglib uri = " /WEB-INF/struts-logic.tld "  prefix = " logic "   %>
<% @ taglib uri = " /WEB-INF/struts-bean.tld "  prefix = " bean "   %>
<% @ taglib uri = " /WEB-INF/struts-html.tld "  prefix = " html "   %>
<% @ page contentType = " text/html; charset=GBK "   %>
< html:html >
< head >
< title >
page
</ title >
</ head >
< body >
< table  align ="center"  border ="2" >
< tr >
< th > a_title </ th >
< th > a_body </ th >
< th > a_a_date </ th >
< th > a_author </ th >
</ tr >

< logic:iterate  id ="listd"  name ="list" >
< tr >
< td >
< bean:write  name ="listd"  property ="a_title" />
</ td >
< td >
< bean:write  name ="listd"  property ="a_author" />
</ td >
< td >
< bean:write  name ="listd"  property ="a_date" />
</ td >
< td >
< bean:write  name ="listd"  property ="a_date" />
</ td >
</ tr >
</ logic:iterate >

</ table >

< bean:write  name ="page"  property ="currentPage" />
< bean:write  name ="page"  property ="totalPages"   />
< html:link  action ="/pageAction.do?pageMethod=first"
paramName
="page"  paramProperty ="currentPage"  paramId ="currentPage" > 首页 </ html:link >
   
< html:link  action ="/pageAction.do?pageMethod=previous"
paramName
="page"  paramProperty ="currentPage"  paramId ="currentPage" > 上一页 </ html:link >
   
< html:link  action ="/pageAction.do?pageMethod=next"
paramName
="page"  paramProperty ="currentPage"  paramId ="currentPage" > 下一页 </ html:link >

   
< html:link  action ="/pageAction.do?pageMethod=last"
paramName
="page"  paramProperty ="currentPage"  paramId ="currentPage" > 尾页 </ html:link >
</ body >
</ html:html >




启动浏览 pageAction.do  运行OK。



****************************************************************************************


配置文件


<? xml version="1.0" encoding="UTF-8" ?>

<! DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
>
< hibernate-mapping >

    
< class  name ="page.dal.articleVO"  table ="t_article"   >


    
< id  name ="a_id"  column ="a_id"  unsaved-value ="0"   >
      
< generator  class ="native" />
 
</ id >
     
< property  name ="c_id"     column ="c_id" />
     
< property  name ="a_title"  column ="a_title" />
     
< property  name ="a_sort"   column ="a_sort" />
     
< property  name ="a_date"   column ="a_date" />
     
< property  name ="a_body"   column ="a_body" />
     
< property  name ="a_hit"    column ="a_hit" />
     
< property  name ="a_author"  column ="a_author" />
   
    
  
</ class >

</ hibernate-mapping >

hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class org.gjt.mm.mysql.Driver
hibernate.connection.url jdbc:mysql://localhost:
3306 /wjcms
hibernate.connection.username root
hibernate.connection.password 
hibernate.connection.pool_size 
1
hibernate.proxool.pool_alias pool1
hibernate.show_sql true
hibernate.max_fetch_depth 
1
hibernate.cache.use_query_cache true


posted on 2007-03-14 23:44 duansky 阅读(318) 评论(0)  编辑  收藏 所属分类: Java


只有注册用户登录后才能发表评论。


网站导航: