您的位置:首页 > 编程语言 > Java开发

struts+spring+hibernate的web应用 Service层代码编写

2007-04-21 15:40 621 查看
现在开始编写 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 了。
在 spring-context 包中新建 applicationContext.xml 。配置的写法如下:


<? xml version="1.0" encoding="ISO-8859-1" ?>


<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >




< beans >


<!-- dataSource config -->


< bean id ="dataSource" class ="org.springframework.jndi.JndiObjectFactoryBean" >


< property name ="jndiName" >


< value > java:comp/env/jdbc/game </ value >


</ property >


</ bean >


<!-- SessionFactory -->


< bean id ="sessionFactory"


class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >




< property name ="dataSource" >


< ref bean ="dataSource" />


</ property >


< property name ="configLocation" >


< value > classpath:com/game/bean/hibernate/hibernate.cfg.xml </ value >


</ property >


</ bean >




<!-- TransactionManager -->


< bean id ="transactionManager"


class ="org.springframework.orm.hibernate3.HibernateTransactionManager" >


< property name ="sessionFactory" >


< ref local ="sessionFactory" />


</ property >


</ bean >


<!-- DAO -->


< bean id ="productsDao" class ="com.game.products.dao.hibernate.ProductsMapDao" >


< property name ="sessionFactory" >


< ref bean ="sessionFactory" />


</ property >


</ bean >




<!-- Services -->


< bean id ="productsService" class ="com.game.products.services.ProductsServiceImp" >


< property name ="productsDao" >


< ref bean ="productsDao" />


</ property >


</ bean >


< bean id ="pagerService" class ="com.game.commons.PagerService" >


</ bean >
</beans>

配置文件不难,主要是些 IOC 控制。数据库链接我采用的是数据源方式,需要在 tomcat 的conf文件夹下的 server.xml 中添加数据源,添加的数据如下:


< Context path ="/game" docBase ="D:/tomcat-5.5.20/webapps/game" debug ="0" reloadable ="true" >


< Resource


name ="jdbc/game"


type ="javax.sql.DataSource"


password =""


driverClassName ="net.sourceforge.jtds.jdbc.Driver"


maxIdle ="2"


maxWait ="5000"


username ="sa"


url ="jdbc:jtds:sqlserver://127.0.0.1:16899/game"


maxActive ="4" />




</ Context >

这个数据源是针对 tomcat 5.5 以上版本的,以下版本的写法有所不同,不同之处可以用 google 搜索得知。这个数据源很简单,并没有过多的配置来优化系统,只是为了让项目更容易让人理解。需要注意都是,我的数据链接的JDBC包是jtds包,而不是普通的那个三个jar包。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: