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

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 包。

分享到:
评论

相关推荐

    Maven下搭建Struts2+spring+hibernate框架

    在完成上述配置后,开发者可以创建Action类(Struts2的控制器),Service层(Spring的业务逻辑),DAO层(数据访问对象,使用Hibernate进行数据库操作),以及相应的视图(JSP页面)。通过Maven的生命周期管理,可以...

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...

    SSH(Struts+Spring+Hibernate)结合项目简单实例

    SSH(Struts+Spring+Hibernate)是Java Web开发中一种常见的技术栈,它将MVC设计模式、依赖注入和持久层框架集成为一个整体,大大提高了开发效率和代码的可维护性。下面我们将深入探讨SSH框架的各个组成部分及其结合...

    在Netbeans中使用Struts2.0+Spring2.5+Hibernate框架

    在项目源代码目录中创建四个包:`po`(持久化对象)、`dao`(数据访问对象)、`service`(业务逻辑层)以及`action`(Struts的Action)。 #### 三、模型层开发 ##### 1. 构建实体类 在`po`包中创建`User`类: ```...

    struts+spring+hibernate(mysql)用户登录及文件上传

    Struts、Spring 和 Hibernate 是Java Web开发中的三大框架,它们结合使用可以构建高效、模块化的应用程序,特别是对于处理用户登录和文件上传等常见功能。在这个项目中,"struts+spring+hibernate(mysql)用户登录及...

    struts+spring+hibernate

    Struts、Spring 和 Hibernate 是Java开发中非常著名的三个开源框架,它们构成了经典的“SSH”(Struts + Spring + Hibernate)企业级应用开发架构。这个架构为开发者提供了模型-视图-控制器(MVC)设计模式的实现,...

    Struts1+Spring2+Hibernate2整合详细例子

    Struts1、Spring2和Hibernate2是Java Web开发中的三个重要框架,它们分别负责MVC模式中的表现层、业务层和服务层。这个整合例子旨在展示如何将这三个框架协同工作,以构建一个完整的Java Web应用程序。 Struts1是...

    struts2.1+spring2.5+hibernate3.3整合之第一步(spring2.5+hibernate3.3)

    Struts2.1、Spring2.5和Hibernate3.3是经典的Java企业级开发框架组合,它们各自在应用程序的不同层面提供了强大的支持。本篇将详细阐述这三个组件的整合过程,以及各自的核心特性。 首先,Struts2是一个基于MVC设计...

    使用struts+spring+hibernate 组装web应用

    Struts、Spring 和 Hibernate 是三个流行的开源框架,它们在构建 Web 应用程序时各司其职,共同形成一个强大的架构。Struts 主要负责表示层(Presentation Layer),Spring 负责业务层(Business Layer),而 ...

    Struts+Spring+Hibernate练习(完整源码)

    Struts、Spring 和 Hibernate 是Java开发领域中三大主流框架,它们在构建企业级Web应用程序时起着关键作用。Struts提供了MVC(Model-View-Controller)架构,Spring提供了依赖注入和面向切面编程,而Hibernate则是一...

    网上订餐系统(struts+spring+hibernate).rar

    网上订餐系统是一种基于互联网技术实现的餐饮服务应用,它结合了Struts、Spring和Hibernate三个核心Java EE框架,为用户提供便捷的在线订餐体验。这个压缩包文件"网上订餐系统(struts+spring+hibernate).rar"很可能...

    struts+spring+hibernate的简单应用

    将Struts、Spring和Hibernate结合在一起,可以构建出一个完整的三层架构应用:Struts作为前端控制器,负责接收和响应用户请求;Spring作为业务层,管理对象和事务;Hibernate作为持久层,处理数据库操作。以下是如何...

    SSH(Struts+Spring+Hibernate)三层架构.

    SSH(Struts+Spring+Hibernate)是Java Web开发中常用的一种三层架构模式,它将应用程序分为表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer),以实现清晰的...

    博客Struts2+Spring2+Hibernate3 web应用示例

    这个“博客Struts2+Spring2+Hibernate3 web应用示例”旨在展示如何将这三个框架有效地结合在一起,以实现一个完整的后端管理系统,比如书管理应用。 Struts2是Action导向的MVC框架,负责处理HTTP请求,提供控制器层...

    Struts2+Hibernate+Spring基于单表的增删改查code

    Struts2、Hibernate和Spring是Java Web开发中的三大框架,它们的组合,通常被称为SSH(Struts2+Spring+Hibernate)或SSH2。这个“Struts2+Hibernate+Spring基于单表的增删改查code”项目是一个典型的Java Web应用...

    struts+spring+hibernate开发 注册小实例

    Struts、Spring 和 Hibernate 是Java Web开发中的三大框架,它们的组合通常被称为SSH(Struts、Spring、Hibernate)。这个“struts+spring+hibernate开发 注册小实例”是为初学者设计的一个教程,目的是帮助他们快速...

    Struts2+Spring4+Hibernate4整合

    Struts2、Spring4和Hibernate4是Java Web开发中的三个核心框架,它们分别负责MVC模式中的表现层、业务层和服务层。SSH(Struts2、Spring、Hibernate)的整合是构建高效、灵活的企业级应用的常用方式。下面将详细阐述...

    Struts2 + Spring + Hibernate + DWR 项目布署笔记

    "Struts2 + Spring + Hibernate + DWR"是一个常见的Java Web开发框架组合,用于构建动态、数据驱动的Web应用程序。这个项目部署笔记将深入探讨这四个组件的核心功能以及它们如何协同工作。 首先,Struts2是一个基于...

Global site tag (gtag.js) - Google Analytics