posts - 14, comments - 15, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

java分页代码

Posted on 2008-09-27 11:03 析木 阅读(13289) 评论(14)  编辑  收藏

现在开始编写 Service 层代码:

com.game.products.services.iface 包中新建 ProductsService 接口,代码如下:

package  com.game.products.services.iface;

 
import  java.util.List;

 
import  com.game.products.model.Products;

 
public   interface  ProductsService   {
     
void  addProduct(Products pd); // 添加记录 
      void  deleteProduct(Products pd); // 删除记录     
     List getProducts(); // 获得所有记录 
      int  getRows();; // 获得总行数 
     List getProducts( int  pageSize,  int  startRow) ; // 获得一段记录 
     Products getProduct(String gameId); // 根据ID获得记录 
     String getMaxID(); // 获得最大ID值 
      void  updateProductd(Products pd); // 修改记录 
     List queryProducts(String fieldname,String value); // 根据条件查询的所有记录 
      int  getRows(String fieldname,String value); // 获得总行数 
     List queryProducts(String fieldname,String value, int  pageSize,  int  startRow); // 根据条件查询的一段记录 
 }
com.game.products.services 包中新建 ProductsServiceImp 类,这个类实现了 ProductsService 接口,代码如下:
package  com.game.products.services;

 
import  java.util.List;

 
import  com.game.products.dao.iface.ProductsDao;
 
import  com.game.products.model.Products;
 
import  com.game.products.services.iface.ProductsService;

 
public   class  ProductsServiceImp  implements  ProductsService  {
     
private  ProductsDao productsDao;
    
     
public  ProductsServiceImp()  {} 
    
     
/** */ /** 
     * 函数说明:添加信息
     * 参数说明:对象 
     * 返回值:
      
*/
 
      
public   void  addProduct(Products pd)   {
        productsDao.addProduct(pd);
    }
 
 
      
/** */ /** 
     * 函数说明:删除信息
     * 参数说明: 对象
     * 返回值:
      
*/
 
      
public   void  deleteProduct(Products pd)   {
        productsDao.deleteProduct(pd);
    }
 
 
      
/** */ /** 
     * 函数说明:获得所有的信息
     * 参数说明: 
     * 返回值:信息的集合
      
*/
 
      
public  List getProducts()   {
         
return  productsDao.getProducts();
    }
 
    
     
/** */ /** 
     * 函数说明:获得总行数
     * 参数说明: 
     * 返回值:总行数
      
*/
 
      
public   int  getRows()   {
         
return  productsDao.getRows();
    }
 
    
     
/** */ /** 
     * 函数说明:获得一段信息
     * 参数说明: 
     * 返回值:信息的集合
      
*/
 
      
public  List getProducts( int  pageSize,  int  startRow)   {
         
return  productsDao.getProducts(pageSize, startRow);
    }
 
 
      
/** */ /** 
     * 函数说明:获得一条的信息
     * 参数说明: ID
     * 返回值:对象
      
*/
 
      
public  Products getProduct(String gameId)   {
         
return  productsDao.getProduct(gameId);
    }
 
 
      
/** */ /** 
     * 函数说明:获得最大ID
     * 参数说明: 
     * 返回值:最大ID
      
*/
 
      
public  String getMaxID()   {
         
return  productsDao.getMaxID();
    }
 
 
      
/** */ /** 
     * 函数说明:修改信息
     * 参数说明: 对象
     * 返回值:
      
*/
 
      
public   void  updateProductd(Products pd)   {
        productsDao.updateProductd(pd);
    }
 
 
      
/** */ /** 
     * 函数说明:查询信息
     * 参数说明: 集合
     * 返回值:
      
*/
 
      
public  List queryProducts(String fieldname,String value)   {
         
return  productsDao.queryProducts(fieldname, value);
    }
 
    
     
/** */ /** 
     * 函数说明:获得总行数
     * 参数说明: 
     * 返回值:总行数
      
*/
 
      
public   int  getRows(String fieldname,String value)   {
         
return  productsDao.getRows(fieldname, value);
    }
 
    
     
/** */ /** 
     * 函数说明:查询一段信息
     * 参数说明: 集合
     * 返回值:
      
*/
 
      
public  List queryProducts(String fieldname,String value, int  pageSize,  int  startRow)   {
         
return  productsDao.queryProducts(fieldname, value,pageSize,startRow);
    }
 
 
      
public  ProductsDao getProductsDao()   {
         
return  productsDao;
    }
 
 
      
public   void  setProductsDao(ProductsDao productsDao)   {
         
this .productsDao  =  productsDao;
    }
 
 
}

基本的业务层代码就这些了。因为还有分页的业务,所以接下来编写分页的代码。


分页是个公共的类,所以放在
com.game.commons 中。

Pager 类,封装了分页需要的属性,代码如下:

package  com.game.commons;

 
import  java.math. * ;

 
public   class  Pager   {
     
private   int  totalRows;  // 总行数 
      private   int  pageSize  =   30 ;  // 每页显示的行数 
      private   int  currentPage;  // 当前页号 
      private   int  totalPages;  // 总页数 
      private   int  startRow;  // 当前页在数据库中的起始行 
     
     
public  Pager()   {
    }
 
    
     
public  Pager( int  _totalRows)   {
        totalRows  
=  _totalRows;
        totalPages 
= totalRows / pageSize;
         
int  mod = totalRows % pageSize;
         
if (mod > 0 )  {
            totalPages 
++ ;
        }
 
        currentPage  
=   1 ;
        startRow  
=   0 ;
    }
 
    
     
public   int  getStartRow()   {
         
return  startRow;
    }
 
      
public   int  getTotalPages()   {
         
return  totalPages;
    }
 
      
public   int  getCurrentPage()   {
         
return  currentPage;
    }
 
      
public   int  getPageSize()   {
         
return  pageSize;
    }
 
      
public   void  setTotalRows( int  totalRows)   {
         
this .totalRows  =  totalRows;
    }
 
      
public   void  setStartRow( int  startRow)   {
         
this .startRow  =  startRow;
    }
 
      
public   void  setTotalPages( int  totalPages)   {
         
this .totalPages  =  totalPages;
    }
 
      
public   void  setCurrentPage( int  currentPage)   {
         
this .currentPage  =  currentPage;
    }
 
      
public   void  setPageSize( int  pageSize)   {
         
this .pageSize  =  pageSize;
    }
 
      
public   int  getTotalRows()   {
         
return  totalRows;
    }
 
      
public   void  first()   {
        currentPage  
=   1 ;
        startRow  
=   0 ;
    }
 
      
public   void  previous()   {
         
if  (currentPage  ==   1 )   {
             
return ;
        }
 
        currentPage 
-- ;
        startRow  
=  (currentPage  -   1 )  *  pageSize;
    }
 
      
public   void  next()   {
         
if  (currentPage  <  totalPages)   {
            currentPage 
++ ;
        }
 
        startRow  
=  (currentPage  -   1 )  *  pageSize;
    }
 
      
public   void  last()   {
        currentPage  
=  totalPages;
        startRow  
=  (currentPage  -   1 )  *  pageSize;
    }
 
      
public   void  refresh( int  _currentPage)   {
        currentPage  
=  _currentPage;
         
if  (currentPage  >  totalPages)   {
            last();
        }
 
    }
 
}
PagerService 类,主要有个 getPager 方法返回 Pager 类。代码如下:
 package  com.game.commons;

 
public   class  PagerService   {
     
public  Pager getPager(String currentPage,String pagerMethod, int  totalRows)   {
         
//     定义pager对象,用于传到页面 
         Pager pager  =   new  Pager(totalRows);
         
//     如果当前页号为空,表示为首次查询该页
         
//     如果不为空,则刷新pager对象,输入当前页号等信息 
           if  (currentPage  !=   null )   {
            pager.refresh(Integer.parseInt(currentPage));
        }
 
         
//     获取当前执行的方法,首页,前一页,后一页,尾页。 
           if  (pagerMethod  !=   null )   {
             
if  (pagerMethod.equals( " first " ))   {
                pager.first();
            }
   else   if  (pagerMethod.equals( " previous " ))   {
                pager.previous();
            }
   else   if  (pagerMethod.equals( " next " ))   {
                pager.next();
            }
   else   if  (pagerMethod.equals( " last " ))   {
                pager.last();
            }
 
        }
 
         
return  pager;
    }
 
}

这个分页方法比较简单,而且功能也齐全,许多页面级的开源 table 中分页很多也是基于这个原理,所以理解了这个分页,对其他各种分页技术的理解也就迎刃而解了。

服务层的代码就这些了,接下来就可以写 spring 的配置文件来用 spring 管理这些 Dao Service 了。


评论

# re: java分页代码  回复  更多评论   

2009-05-19 00:12 by 求知如采金
你好,我是JAVA初学者,看了你的分页很有帮助,在此说声谢谢。

但是我有个很弱智的问题,我想看看DAO类的代码,比如总行数怎么查出来,怎么赋值到bean

# re: java分页代码  回复  更多评论   

2009-05-19 18:37 by 魏久银
@求知如采金
select count(*) fom TABLE where.....

# re: java分页代码  回复  更多评论   

2009-06-18 13:53 by 毛虫
你要写就写完整 可以运行啊!把配置文件写好啊!!
我也好看嘛 呵呵 我是初学者 很多都不会啊

# re: java分页代码[未登录]  回复  更多评论   

2009-07-08 14:05 by cc
你怎么能这样呢,初学者有理了?气氛

# re: java分页代码  回复  更多评论   

2009-08-13 20:40 by SexBro
需要DAO!!!

# re: java分页代码  回复  更多评论   

2009-12-16 17:29 by 程瑞
不错很好可以这样想有脑 goooooooooooooooooooooooood

# re: java分页代码  回复  更多评论   

2010-02-08 17:06 by HTPM1
楼主的分页代码确实很好。。不过我还是想看一下你的DAO。。查询SQL怎么写的。。谢谢能发布一下吗?

# re: java分页代码[未登录]  回复  更多评论   

2010-08-03 15:41 by ann
在操作上下页的时候,能保证操作的是同一个list吗?

# re: java分页代码  回复  更多评论   

2010-09-17 09:10 by 就阿va
怎么和我们头一样 把底层的 都封装了 不让看阿 郁闷

# re: java分页代码  回复  更多评论   

2012-01-17 15:14 by S771880049
至少给出表的结构也好啊

# re: java分页代码  回复  更多评论   

2012-08-24 16:48 by 游客
看了半天才发现很不完整。
唉!

# re: java分页代码  回复  更多评论   

2012-11-04 23:46 by jayhom
写的很好,原理搞懂了。上面那个回复的@毛虫,你学习还理直气壮地,有你这样的么?

# re: java分页代码  回复  更多评论   

2012-12-12 15:43 by 郭濛濛
思路很清晰,谢谢分享!

# re: java分页代码  回复  更多评论   

2014-05-17 00:33 by zuidaima
java分页代码代码下载:http://www.zuidaima.com/share/search.htm?key=java%E5%88%86%E9%A1%B5

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 
我要啦免费统计