Posted on 2008-09-27 11:03
析木 閱讀(13299)
評論(14) 編輯 收藏
現(xiàn)在開始編寫 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();; // 獲得總行數(shù)
List getProducts( int pageSize, int startRow) ; // 獲得一段記錄
Products getProduct(String gameId); // 根據(jù)ID獲得記錄
String getMaxID(); // 獲得最大ID值
void updateProductd(Products pd); // 修改記錄
List queryProducts(String fieldname,String value); // 根據(jù)條件查詢的所有記錄
int getRows(String fieldname,String value); // 獲得總行數(shù)
List queryProducts(String fieldname,String value, int pageSize, int startRow); // 根據(jù)條件查詢的一段記錄
}
在 com.game.products.services 包中新建 ProductsServiceImp 類,這個類實現(xiàn)了 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()
{}

/** *//** */ /** *//**
* 函數(shù)說明:添加信息
* 參數(shù)說明:對象
* 返回值:
*/

public void addProduct(Products pd)
{
productsDao.addProduct(pd);
}

/** *//** */ /** *//**
* 函數(shù)說明:刪除信息
* 參數(shù)說明: 對象
* 返回值:
*/

public void deleteProduct(Products pd)
{
productsDao.deleteProduct(pd);
}

/** *//** */ /** *//**
* 函數(shù)說明:獲得所有的信息
* 參數(shù)說明:
* 返回值:信息的集合
*/

public List getProducts()
{
return productsDao.getProducts();
}

/** *//** */ /** *//**
* 函數(shù)說明:獲得總行數(shù)
* 參數(shù)說明:
* 返回值:總行數(shù)
*/

public int getRows()
{
return productsDao.getRows();
}

/** *//** */ /** *//**
* 函數(shù)說明:獲得一段信息
* 參數(shù)說明:
* 返回值:信息的集合
*/

public List getProducts( int pageSize, int startRow)
{
return productsDao.getProducts(pageSize, startRow);
}

/** *//** */ /** *//**
* 函數(shù)說明:獲得一條的信息
* 參數(shù)說明: ID
* 返回值:對象
*/

public Products getProduct(String gameId)
{
return productsDao.getProduct(gameId);
}

/** *//** */ /** *//**
* 函數(shù)說明:獲得最大ID
* 參數(shù)說明:
* 返回值:最大ID
*/

public String getMaxID()
{
return productsDao.getMaxID();
}

/** *//** */ /** *//**
* 函數(shù)說明:修改信息
* 參數(shù)說明: 對象
* 返回值:
*/

public void updateProductd(Products pd)
{
productsDao.updateProductd(pd);
}

/** *//** */ /** *//**
* 函數(shù)說明:查詢信息
* 參數(shù)說明: 集合
* 返回值:
*/

public List queryProducts(String fieldname,String value)
{
return productsDao.queryProducts(fieldname, value);
}

/** *//** */ /** *//**
* 函數(shù)說明:獲得總行數(shù)
* 參數(shù)說明:
* 返回值:總行數(shù)
*/

public int getRows(String fieldname,String value)
{
return productsDao.getRows(fieldname, value);
}

/** *//** */ /** *//**
* 函數(shù)說明:查詢一段信息
* 參數(shù)說明: 集合
* 返回值:
*/

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;
}
}
基本的業(yè)務層代碼就這些了。因為還有分頁的業(yè)務,所以接下來編寫分頁的代碼。
分頁是個公共的類,所以放在 com.game.commons 中。
Pager 類,封裝了分頁需要的屬性,代碼如下:
package com.game.commons;

import java.math. * ;


public class Pager
{
private int totalRows; // 總行數(shù)
private int pageSize = 30 ; // 每頁顯示的行數(shù)
private int currentPage; // 當前頁號
private int totalPages; // 總頁數(shù)
private int startRow; // 當前頁在數(shù)據(jù)庫中的起始行

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));
}
// 獲取當前執(zhí)行的方法,首頁,前一頁,后一頁,尾頁。

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 中分頁很多也是基于這個原理,所以理解了這個分頁,對其他各種分頁技術(shù)的理解也就迎刃而解了。
服務層的代碼就這些了,接下來就可以寫 spring 的配置文件來用 spring 管理這些 Dao 和 Service 了。