数据库实现分页

写一个数据库通用的分页功能,对于一个项目来说这个是很实用的功能,可以自己封装成jar包来使用

首先来新建一个工程,目录如下



然后新建一个 Pager类,代码如下

package com.page.ben;


public class Pager {
private int pageNo;//当前页号
private int pageSize =5;//页大小
private int pageCount;//总页数
private int rowCount;//总记录数

private int prePageNo;//前一页
private int nextPageNo;//下一页
private int lastPageNo;//最后一页
private int firstPageNo;//第一页

public Pager(){

}

public Pager(int pageSize,int rowCount){
this.pageSize = pageSize;
this.pageNo = 1;
this.rowCount = rowCount;
if(rowCount%pageSize ==0){
this.pageCount = rowCount/pageSize;
}else{
this.pageCount = rowCount/pageSize+1;
}
this.firstPageNo = 1;
this.lastPageNo = pageCount;
if(pageNo > 1 ){
this.prePageNo = pageNo-1;
}
if(pageNo<lastPageNo){
this.nextPageNo = pageNo+1;
}
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getRowCount() {
return rowCount;
}
public void setRowCount(int rowCount) {
this.rowCount = rowCount;
}
public int getPrePageNo() {
return prePageNo;
}
public void setPrePageNo(int prePageNo) {
this.prePageNo = prePageNo;
}
public int getNextPageNo() {
return nextPageNo;
}
public void setNextPageNo(int nextPageNo) {
this.nextPageNo = nextPageNo;
}
public int getLastPageNo() {
return lastPageNo;
}
public void setLastPageNo(int lastPageNo) {
this.lastPageNo = lastPageNo;
}
public int getFirstPageNo() {
return firstPageNo;
}
public void setFirstPageNo(int firstPageNo) {
this.firstPageNo = firstPageNo;
}
}

然后新建一个dao接口

package com.page.dao;


import com.page.ben.Pager;


public interface PageDao {


/**下一页
* @param page
*/
public void forward(Pager page);

/**上一页
* @param page
*/
public void backward(Pager page);

/**首页
* @param page
*/
public void firstPage(Pager page);

/**尾页
* @param page
*/
public void lastPage(Pager page);

/**位置页
* @param page
* @param locationPage
*/
public void locatePage(Pager page,int locationPage);
}

然后新建一个实现类

package com.page.dao.impl;


import com.page.ben.Pager;
import com.page.dao.PageDao;


public class PageDaoImpl implements PageDao{
@Override
public void forward(Pager page) {

if(page.getPageNo()<page.getLastPageNo()){
page.setPageNo(page.getPageNo()+1);
}
}


@Override
public void backward(Pager page) {


if(page.getPageNo() > page.getFirstPageNo()){
page.setPageNo(page.getPageNo()-1);
}
}


@Override
public void firstPage(Pager page) {


page.setPageNo(1);
}


@Override
public void lastPage(Pager page) {


page.setPageNo(page.getLastPageNo());
}


@Override
public void locatePage(Pager page,int locationPage) {


if(locationPage < page.getLastPageNo()||locationPage > page.getFirstPageNo()){
page.setPageNo(locationPage);
}else{
page.setPageNo(1);
}
}
}

然后建一个分页服务

package com.page.service;


import com.page.ben.Pager;


public interface PageService {
public Pager getPagerByMethodName(String methodName,int currentPage,int rowCount);
}

再来实现它

package com.page.service.impl;


import com.page.ben.Pager;
import com.page.dao.PageDao;
import com.page.dao.impl.PageDaoImpl;
import com.page.service.PageService;


public class PageServiceImpl implements PageService {
private PageDao dao = new PageDaoImpl();


public PageDao getDao() {
return dao;
}


public void setDao(PageDao dao) {
this.dao = dao;
}


@Override
public Pager getPagerByMethodName(String methodName, int currentPage,
int rowCount) {
Pager page = new Pager(5, rowCount);
if (currentPage > 0) {// 当前页号合法,设置
dao.locatePage(page, currentPage);
}
if (methodName == null) {
methodName = "";
}
if (methodName.equals("first")) {//首页
dao.firstPage(page);
} else if (methodName.equals("forward")) {//下一页
dao.forward(page);
} else if (methodName.equals("backward")) {//上一页
dao.backward(page);
} else if (methodName.equals("last")) {//末页
dao.lastPage(page);
} else if (methodName.equals("jump")) {//跳转页
dao.forward(page);
} else {// 默认是首页
dao.firstPage(page);
}
return page;
}
}


下面来看具体的实现:

public class Test {
private static String pagerMethod;
private static Pager page;
private static int currentPage = 1;


public static String getPagerMethod() {
return pagerMethod;
}
public static void setPagerMethod(String pagerMethod) {
Test.pagerMethod = pagerMethod;
}
public static Pager getPage() {
return page;
}
public static void setPage(Pager page) {
Test.page = page;
}
public static int getCurrentPage() {
return currentPage;
}
public static void setCurrentPage(int currentPage) {
Test.currentPage = currentPage;
}
private static UserDao dao = new UserDaoImpl();  


public static void main(String[] args) {  


//      分页测试 
        String inpage="1";
          String inmeth=null;
//        String inmeth="first";//首页
//        String inmeth="forward";//下一页
//          String inmeth="backward";//上一页
//        String inmeth="last";//末页


        PageServiceImpl pageServiceImpl=new PageServiceImpl();
        if(inpage==null){
currentPage=1;
}else {
currentPage=Integer.valueOf(inpage);  
}
pagerMethod = inmeth;  
int rows = 0;
rows = (int)dao.geCount();
page = new Pager(5, rows);
// System.out.println("首页"+page.getFirstPageNo());
// System.out.println("末页"+page.getLastPageNo());
// System.out.println("下一页"+page.getNextPageNo());
// System.out.println("页数"+page.getPageCount());
// System.out.println("当前页"+page.getPageNo());
// System.out.println("每页显示数"+page.getPageSize());
// System.out.println("上一页"+page.getPrePageNo());
// System.out.println("行数"+page.getRowCount());
//
page = pageServiceImpl.getPagerByMethodName(page,pagerMethod, currentPage, rows);
System.out.println("---------------------");
System.out.println("首页"+page.getFirstPageNo());
System.out.println("末页"+page.getLastPageNo());
System.out.println("下一页"+page.getNextPageNo());
System.out.println("页数"+page.getPageCount());
System.out.println("当前页"+page.getPageNo());
System.out.println("每页显示数"+page.getPageSize());
System.out.println("上一页"+page.getPrePageNo());
System.out.println("行数"+page.getRowCount());
List<User> list = dao.findByPage(page);
System.out.println("======================");
for (User user : list) {
System.out.println(user.getId()+"  "+user.getName());
}
System.out.println("总记录数"+rows);
System.out.println("总页数"+page.getPageCount());
System.out.println("每页行数"+page.getPageSize());
System.out.println("当前页"+currentPage);

List<User> lists = dao.findByPage(page);
for (User user : list) {
System.out.println(user.getId()+"  "+user.getName());
}

}


}

当然具体的数据库需要你自己写啦,在这就不细说了,只写一个案例吧:

下面是用Hibernate实现的,其他的也是一样的原理,是用limit(start,end)就可以了

public List<User> findByPage(Pager page) {
List<User> list=null;
StringBuffer buf = new StringBuffer("from User order by id desc");
String sql=buf.toString();
System.out.println(sql);
try{  
System.out.println("---------");
           s = HibernateUtil.getSession(); 
           tx = s.beginTransaction();           
           Query query = s.createQuery(sql);
           query.setFirstResult((page.getPageNo()-1)*page.getPageSize());
query.setMaxResults(page.getPageSize());
query.setCacheable(true);
           list= query.list();
           query=null;
           tx.commit ();
       }catch(HibernateException e){
        tx.rollback();
       }finally{  
           if(s!=null){  
               s.close();  
           }  
       }  
System.out.println("---------"+list.size());
return list;
}

还要有一个查询所有记录的操作,这里就不细说了。

如果还不明白可以去下载源码,链接

http://download.csdn.net/detail/wang_shuyu/9712670

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值