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> ";
}
pgPaginated += page+" ";
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> ";
}
// 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+"条数据 当前第"+page+"页 共"+PAGESIZE+"页 "+pageSize+"条数据/页 "+
// "<a href='javascript:toPage(/"1/")'>首页</a> "+
"<a href='javascript:toPage(/""+(page-1)+"/")'>上一页</a> "+
pgPaginated+
"<a href='javascript:toPage(/""+(page+1)+"/")'>下一页</a> "+
// "<a href='javascript:toPage(/""+PAGESIZE+"/")'>尾页</a> "+
" ";
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+"条数据 当前第"+page+"页 共"+PAGESIZE+"页 "+pageSize+"条数据/页 "+
"<a href='javascript:toPage(/"1/")'>首页</a> "+
"<a href='javascript:toPage(/""+(page-1)+"/")'>上一页</a> "+
"<a href='javascript:toPage(/""+(page+1)+"/")'>下一页</a> "+
"<a href='javascript:toPage(/""+PAGESIZE+"/")'>尾页</a> "+
"<input type='text' size='4' name='page'><input type='button' onclick='submitPage()' value='go'> ";
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)
以上两种方法为分页方法,第一种与百度分页相同,第二种为翻页方式。
这个类基本上可以替代所以的查询操作。