(转)struts+spring+hibernate的web应用(三) Service层代码编写

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

现在开始编写 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包。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值