以前一直使用的是pager-taglib包进行分页,虽然也知道效率可能不高,每次查询都要从数据库中那一边数据,然后提取数据,具体的方法因为不是自己写的也不是很清楚,所以自己花了一些时间写了个适用于 SSH框架的数据库分页用,下面是一些代码和介绍。
H_Page.java 主要的工具包
初始化的时候要进行传值需传入hibernateTemplate获取连接数据库的接口,HQL语句和一页显示多少条数据。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.orm.hibernate3.HibernateTemplate; public class H_Page { private HibernateTemplate hibernateTemplate; private int AllCount;//总记录数 private int PAGESIZE;//页面最大显示记录的数量 private int FULLPAGE;//页面总数 private int CURRENTPAGE;//当前页面 private int BEGINRECORD;//当前页面的第一条记录id private int ENDRECORD;//当前页面的最后一条记录的id private int FULLRECORD;//所有记录的总数 private int TARGETPAGE;//需要跳转到的页面 private List entityList; private String hql = null; /** * @param hql 是传入的sql语句 * @param pagesize 是一页显示多少记录 * */ public H_Page(HibernateTemplate hibernateTemplate,String hql,int pagesize){ this.hibernateTemplate = hibernateTemplate; this.hql = hql; this.PAGESIZE = pagesize; List list = hibernateTemplate.find("select count(*) "+hql); AllCount = Integer.parseInt(list.get(0)+"") ; FULLPAGE = (int) Math.ceil((double)AllCount/(double)PAGESIZE); } /** * 获取实体类列表的方法 * @param hql 是传入的sql语句 * @param skippage 是要跳入的页面码 * @param pagesize 是一页显示多少记录 * */ public List getEntityList(int skippage) { System.out.println("进入分页查询+++++++++++++"); System.out.println(skippage+"+++++++"+FULLPAGE); if(skippage>FULLPAGE){ return null; } this.TARGETPAGE = skippage; System.out.println(hibernateTemplate+"--------------------"); int from = (TARGETPAGE-1)*PAGESIZE; int to = TARGETPAGE*PAGESIZE; System.out.println(from+"+++++"+to); if(to>AllCount){ to = AllCount; } entityList = hibernateTemplate.find(hql).subList(from,to); System.out.println("完成分页查询++++++++++++"); return entityList; } public int getAllCount() { return AllCount; } public void setAllCount(int allCount) { AllCount = allCount; } public int getFULLPAGE() { return FULLPAGE; } public void setFULLPAGE(int fULLPAGE) { FULLPAGE = fULLPAGE; } } |
Dao层的使用
H_Page pageutil = new H_Page(hibernateTemplate, "from 类 t where 条件 order by 属性", 一页显示记录数);//初始化 List<类> list = pageutil.getEntityList(需要跳转的页数); int fullnumber = pageutil.getFULLPAGE(); //最大页数 |
Action中的赋值
privateintcurrentpage;//当前页 privateintfullpage;//总页数 private String pageurl;//链接地址 seter……………geter方法 |
页面上的显示
<inputtype="hidden"value = "${pageurl }"id="pageurl">
<ahref=""id="first">首页a> 这是第 <labelid="current">${currentpage}label> 页 <ahref=""id="before">前一页a> <ahref=""id="after">下一页a> <ahref=""id="last">末页a> 共 <labelid="countPage">${fullpage}label> 页 |
Pageutil.js
$(document).ready(function() { var current = parseInt($("#current").text()); var countPage = parseInt($("#countPage").text()); var after = current+1; var before = current-1; var pageurl = $("#pageurl").val(); //alert($("#current").text()); //alert($("#countPage").text()); $("#first").attr("href", pageurl+"?skippage=1"); $("#last").attr("href", pageurl+"?skippage="+countPage); $("#after").attr("href", pageurl+"?skippage="+after); $("#before").attr("href", pageurl+"?skippage="+before); //alert(pageurl+"?skippage="+countPage); if(current==1){ $("#first").removeAttr("href"); $("#before").removeAttr("href"); $("#first").click(function(){ alert("已经是首页了!!!"); }); $("#before").click(function(){ alert("已经是首页了!!!"); }); } if(current==countPage){ $("#last").removeAttr("href"); $("#after").removeAttr("href"); $("#last").click(function(){ alert("已经是尾页了!!!"); }); $("#after").click(function(){ alert("已经是尾页了!!!"); }); } }); |