以前一直使用的是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">

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<ahref=""id="first">首页</a>&nbsp;&nbsp;&nbsp;&nbsp;这是第&nbsp;

<labelid="current">${currentpage}</label>

&nbsp;

<ahref=""id="before">前一页</a>

<ahref=""id="after">下一页</a>

<ahref=""id="last">末页</a>

&nbsp;&nbsp;&nbsp;

<labelid="countPage">${fullpage}</label>

&nbsp;


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("已经是尾页了!!!");

      });

   }

});