SSH 框架分页代码

package com.redcollar.util;


import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import com.redcollar.dao.BaseDAOHibernate;

public class PaginationUtil extends BaseDAOHibernate {

 /**
  *
  * 传入Hql语句、请求页面、每页显示数量、每次分页显示的页码数,返回Hashtable<br />
  *
  * 返回结果:Data 为List类型,为分页显示数据
  * <br />
  * 返回结果:page 为String类型,为超级连接
  *
  * @param Hql
  * @param page
  * @param pageSize
  * @param Paginated
  * @return hashtable
  */
 
 public Hashtable getPageData(String Hql,int page,int pageSize,int Paginated)
 {
  try {
   
   if(Hql!=null&&!Hql.equals(""))
   {
    
    String HQL = Hql;
    
    System.out.println("HQL:"+HQL.substring(0,HQL.length()));
    
    String[] s = HQL.split("'");
    
    ArrayList al = new ArrayList();
    
    HQL = "";
    
    for (int i = 0; i < s.length; i++) {
     
     if(i%2!=0)
     {
      HQL+= "?";
      
      al.add(s[i]);
      
     }else
     {
      HQL += s[i];
     }
    }

    int PAGESIZE = this.getDataSize(pageSize, Hql);

    Hashtable<String, Object> ht = new Hashtable<String, Object>();
    
    String size = "";
    
    try {
     
     size = this.getListByHql("select count(*) "+Hql).get(0).toString();
     
    } catch (Exception e) {
     
     size = "0";
     
    }
    
    if(PAGESIZE!=0)
    {
     if(page<=0)
     {
      page = 1;
     }
     if(page>=PAGESIZE)
     {
      page = PAGESIZE;
     }
     
     Session ss = this.getSession();
     
     Query qq = ss.createQuery(HQL);
     
     for(int i=0;i<al.size();i++)
     {
      qq.setString(i,al.get(i)+"");
     }
     
     qq.setFirstResult((page-1)*pageSize);
     qq.setMaxResults(pageSize);
     
     List ls = qq.list();
     
     String pg = "";
     
     String pgPaginated = "";
     
     int Paginateda = Paginated/2;

     int a = 1;

     if(page<=Paginateda)
     {
      a = 1;
     }else
     {
      a = page-Paginateda;
     }
     
     if(page > PAGESIZE-Paginateda)
     {
      a = PAGESIZE-Paginated+1;
     }
  
     if(PAGESIZE-Paginateda < 0)
     {
      a = 1;
     }
     
     for (int i = a; i < page; i++) {

      pgPaginated += "<a href='javascript:toPage(/""+(i)+"/")'>["+(i)+"]</a>&nbsp;";

     }
     
     pgPaginated += page+"&nbsp;";
     
     int b = a+Paginated-1;

     if(b>PAGESIZE)
     {
      b = PAGESIZE;
     }

     for (int i = page+1; i <= b; i++) {

      pgPaginated += "<a href='javascript:toPage(/""+(i)+"/")'>["+(i)+"]</a>&nbsp;";
     }

//     System.out.println("b-a:"+(b-a));
     
     pg = "<script type='text/javascript'>" +
     "function toPage(u){" +
     "document.Pagination.action = document.Pagination.action+'&page='+u;" +
     "document.Pagination.submit();"+
     "}" +
     "function submitPage()" +
     "{" +
     "document.Pagination.submit();" +
     "}" +
     "</script>" +
     //"<input type='hidden' name='ql' value='"+hql+"'>" +
     "共"+size+"条数据&nbsp;&nbsp;&nbsp;当前第"+page+"页 共"+PAGESIZE+"页 "+pageSize+"条数据/页&nbsp;&nbsp;&nbsp;"+
//     "<a  href='javascript:toPage(/"1/")'>首页</a>&nbsp;&nbsp;&nbsp;"+
     "<a href='javascript:toPage(/""+(page-1)+"/")'>上一页</a>&nbsp;&nbsp;&nbsp;"+
     pgPaginated+
     "<a href='javascript:toPage(/""+(page+1)+"/")'>下一页</a>&nbsp;&nbsp;&nbsp;"+
//     "<a href='javascript:toPage(/""+PAGESIZE+"/")'>尾页</a>&nbsp;&nbsp;&nbsp;"+
     "&nbsp;&nbsp;&nbsp;&nbsp;";
     
     ht.put("Data",ls);
     ht.put("page",pg);

     ss.close();
    
    }else
    {
     ht.put("page","没有查询到数据");
    } 
    return ht;
   }else
   {
    return null;
   }
   
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
 }

 

/**
  *
  * 传入Hql语句、请求页面、每页显示数量,返回Hashtable<br />
  *
  * 返回结果:Data 为List类型,为分页显示数据
  * <br />
  * 返回结果:page 为String类型,为超级连接
  *
  * @param Hql
  * @param page
  * @param pageSize
  * @param Paginated
  * @return hashtable
  */
 public Hashtable getPageData(String Hql,int page,int pageSize)
 {
  try {
   
   if(Hql!=null&&!Hql.equals(""))
   {
    
    String HQL = Hql;
    
    System.out.println("HQL:"+HQL.substring(0,HQL.length()));
    
    String[] s = HQL.split("'");
    
    ArrayList al = new ArrayList();
    
    HQL = "";
    
    for (int i = 0; i < s.length; i++) {
     
     if(i%2!=0)
     {
      HQL+= "?";
      
      al.add(s[i]);
      
     }else
     {
      HQL += s[i];
     }
    }

    int PAGESIZE = this.getDataSize(pageSize, Hql);
 
    Hashtable<String, Object> ht = new Hashtable<String, Object>();
    
    String size = "";
    
    try {
     
     size = this.getListByHql("select count(*) "+Hql).get(0).toString();
     
    } catch (Exception e) {
     
     size = "0";
     
    }
    
    if(PAGESIZE!=0)
    {
     if(page<=0)
     {
      page = 1;
     }
     if(page>=PAGESIZE)
     {
      page = PAGESIZE;
     }
     
     Session ss = this.getSession();
     
     Query qq = ss.createQuery(HQL);
     
     for(int i=0;i<al.size();i++)
     {
      qq.setString(i,al.get(i)+"");
     }
     
     qq.setFirstResult((page-1)*pageSize);
     qq.setMaxResults(pageSize);
     
     List ls = qq.list();
     
     String pg = "";
     
     pg = "<script type='text/javascript'>" +
     "function toPage(u){" +
     "document.Pagination.action = document.Pagination.action+'&page='+u;" +
     "document.Pagination.submit();"+
     "}" +
     "function submitPage()" +
     "{" +
     "document.Pagination.submit();" +
     "}" +
     "</script>" +
     //"<input type='hidden' name='ql' value='"+hql+"'>" +
     "共"+size+"条数据&nbsp;&nbsp;&nbsp;当前第"+page+"页 共"+PAGESIZE+"页 "+pageSize+"条数据/页&nbsp;&nbsp;&nbsp;"+
     "<a  href='javascript:toPage(/"1/")'>首页</a>&nbsp;&nbsp;&nbsp;"+
     "<a href='javascript:toPage(/""+(page-1)+"/")'>上一页</a>&nbsp;&nbsp;&nbsp;"+
     "<a href='javascript:toPage(/""+(page+1)+"/")'>下一页</a>&nbsp;&nbsp;&nbsp;"+
     "<a href='javascript:toPage(/""+PAGESIZE+"/")'>尾页</a>&nbsp;&nbsp;&nbsp;"+
     "<input type='text' size='4' name='page'><input type='button' onclick='submitPage()' value='go'>&nbsp;&nbsp;&nbsp;&nbsp;";
     
     ht.put("Data",ls);
     ht.put("page",pg);

     ss.close();
    
    }else
    {
     ht.put("page","没有查询到数据");
    } 
    return ht;
   }else
   {
    return null;
   }
   
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
 }
 
 private int getDataSize(int pageSize,String Hql)
 {
  Session ss = this.getSession();
  
  Query qq = null ;
  
  ArrayList al = new ArrayList();
    
  String HQL = Hql;
  
  String[] s = HQL.split("'");
  
  HQL = "";
  
  for (int i = 0; i < s.length; i++) {

   if(i%2!=0)
   {
    HQL+= "?";
    
    al.add(s[i]);
    
   }else
   {
    HQL += s[i];
   }
  }
  
  HQL = "select count(*) " + HQL ;

  qq = ss.createQuery(HQL);

  for(int i=0;i<al.size();i++)
  {
   qq.setString(i,al.get(i)+"");
  }
  
  List ls =  new ArrayList();
  
  try {
   ls = qq.list(); 
  } catch (Exception e) {
   System.out.println("数据长度没有获取到");
  }
  
  ss.close();

  if(ls!=null&&!ls.isEmpty())
  {
   int size = Integer.parseInt(ls.get(0).toString());
   int a = 0;
   if(size%pageSize==0)
   {
    a = size/pageSize;
   }else
   {
    a = size/pageSize+1;
   }
   
   return a;
   
  }else
  {
   return 0; 
  }
 }
 
 /**
  *
  * 传入Hql语句返回List
  *
  * @param Hql
  * @return
  *
  */
 public List getListByHql(String Hql)
 {
  Session ss = this.getSession();
  
  String HQL = Hql;
  
  ArrayList al = new ArrayList();
  
  List alHql = new ArrayList();
  
  String[] s = HQL.split("'");
  
  HQL = "";
  
  for (int i = 0; i < s.length; i++) {

   if(i%2!=0)
   {
    HQL+= "?";
    
    al.add(s[i]);
    
   }else
   {
    HQL += s[i];
   }
  }
  
  Query qq = ss.createQuery(HQL);

  for(int i=0;i<al.size();i++)
  {
   qq.setString(i,al.get(i)+"");
  }
  
  try {
   
   alHql = qq.list();
   
  } catch (Exception e) {
   
   System.out.println("请求数据查询失败");
  }
  
  ss.close();
  
  return alHql;
 }
}
 

 

页面显示方式:

分页信息<%=request.getAttribute("Data") %>

分页信息输出<%=request.getAttribute("page") %>

form表单名字为:Pagination

 

分页方法,应用比较简单,传入HQL加请求页数加每页显示条数,返回LIST和分页超链接信息

 

public List getListByHql(String Hql)
根据HQL语句返回LIST。

public Hashtable getPageData(String Hql,int page,int pageSize,int Paginated)

public Hashtable getPageData(String Hql,int page,int pageSize)
以上两种方法为分页方法,第一种与百度分页相同,第二种为翻页方式。
这个类基本上可以替代所以的查询操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值