`
kong0itey
  • 浏览: 299238 次
社区版块
存档分类
最新评论

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

    博客分类:
  • java
 
阅读更多

前面的文章:

struts+spring+hibernate web 应用 < > 架构搭建

struts+spring+hibernate web 应用 < > Dao 层代码编写

 

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

分享到:
评论

相关推荐

    ssh2(struts2+spring2.5+hibernate3.3)自动生成模版

    就算在项目开发前定制了规范,也有开发人员因为自己的习惯忘记了定制的规范,按照自己的风格来进行代码编写,这样久而久之,一个项目中各种风格的代码都有,对于ssh架构的开发人员每天都会遇到重复的代码编写(当然对重复...

    ssh(structs,spring,hibernate)框架中的上传下载

    Struts+Spring+Hibernate实现上传下载    本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本:  •Struts 1.2  •Spring 1.2.5  •Hibernate 3.0  本文...

    java web技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax+》讲解了JSP/S rvlet技术的基础知识,并提供了一个综合案例展示其具体应用,它们是Java Web服务端技术的基石,也是学习Java Web开发所要必须掌握...

    spring培训学习笔记

    &lt;br&gt;Spring 是指一个用于构造Java 应用程序的轻量级框架,不限定于只编写web 应用,最少侵入。&lt;br&gt;Spring 的核心是个轻量级(Lightweight)的容器(Container),它是实现IoC(Inversion of Control)容器、非侵入性...

    java web开发技术大全

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax+》讲解了JSP/S rvlet技术的基础知识,并提供了一个综合案例展示其具体应用,它们是Java Web服务端技术的基石,也是学习Java Web开发所要必须掌握...

    Struts2SpringHibernate整合,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)

    Struts2,Spring,Hibernate是Java Web开发中最为常见的3种框架,掌握这3种框架是每个Java Web开发人员的基本功。 然而,很多初学者在集成这3个框架的时候,总是会遇到各种各样的问题。 我在读大学刚刚学习SSH的...

    基于JAVA WEB SSH框架的小区物业管理系统(源码+数据库).zip

    整个项目采用MVC模式,应用Struts Spring Hibernate三个框架实现了一个小区管理系统。分为View层(显示层)、Control层(控制层)、Service 层(业务逻辑层)、DAO层(数据库访问对象层)。利用Spring的依赖注入和...

    物业管理系统java+jsp+sql server2005

    整个项目采用MVC模式,应用Struts Spring Hibernate三个框架实现了一个小区管理系统。分为View层(显示层)、Control层(控制层)、Service层(业务逻辑层)、DAO层(数据库访问对象层)。利用Spring的依赖注入和...

    现代化小区物业管理系统源码(java)

    整个项目采用MVC模式,应用Struts Spring Hibernate三个框架实现了一个小区管理系统。分为View层(显示层)、Control层(控制层)、Service 层(业务逻辑层)、DAO层(数据库访问对象层)。利用Spring的依赖注入和...

    Spring2.52 开发手册

    Spring为编写企业应用程序提供了轻量的解决方案,同时仍然支持使用声明式事务、 用RMI或web service远程调用、以及使用多种方式来将数据持久化到数据库。Spring提供了全功能的 MVC framework, 以及透明集成AOP到你...

Global site tag (gtag.js) - Google Analytics