Hibernate_Spring中通用的Service类(转自段洪杰)

注意,以下代码随手写的,只测试了一小部份:

Service类要通用,本身就有点难.这一层跟business密切相关. 不过在数据库时代,什么business都少不了几个数据库的操作,那就先把这几个操作放到base的Service中来.当然,因为通用,为了让service知道你操作什么域,也少不了要指定一下,所以增加了个initBaseService(Class service)方法.如果一个service中有多个表要操少,就不断增加initXXXXXService(Class service)方法.建议service做成粗粒度的.就是应该包含多个功能相近的表的DAO操作.

具体开发软件时,少不得扩充这个Service类,在这里如果用"适配器"设计模试来做,效果可能要好.


java代码: 


package common.spring.service;

import java.util.List;
import java.util.Iterator;
import common.spring.dao.BaseDAOImpl;
import common.spring.dao.IBaseDAO;
import net.sf.hibernate.HibernateException;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author 段洪杰
* @version 1.0
*/

public class BaseServiceSpringImpl implements IBaseService {

    private IBaseDAO baseDAO;

    public BaseServiceSpringImpl() {
        super();
    }


   
/**
     * 增加信息 object
     * @param object Object
     */

    public void setObject(Object object) throws BaseServiceException {
        try {
            baseDAO.setObject(object);
        } catch (Exception ex) {
            throw new BaseServiceException("存object信息时出错! " + ex.toString());
        }

    }



   
/**
     * 删除信息 object
     * @param id String
     */

    public void removeObjectById(String id) throws BaseServiceException {
        try {
            Object object = baseDAO.getObjectById(id);
            baseDAO.removeObject(object);
        } catch (Exception ex) {
            throw new BaseServiceException("删除object时出错! " + ex.toString());
        }

    }

   
/**
     * 取出信息 object
     * @param id String
     */

    public Object getObjectById(String id) throws BaseServiceException {
        Object object=null;
        try {
            object = baseDAO.getObjectById(id);
        } catch (Exception ex) {
            throw new BaseServiceException("根据ID取出信息object时出错! " + ex.toString());
        }
    return object;
    }

   
/**
     * 修改信息 object
     * @param object Object
     */

    public void modifyObject(Object object) throws BaseServiceException {
        try {
            baseDAO.modifyObject(object);
        } catch (Exception ex) {
            throw new BaseServiceException("修改信息object时出错! " + ex.toString());
        }

    }

   
/**
     * 取所有信息集合
     * @return Iterator
     * @param  position int, length int
     */

    public Iterator getObjects(int position, int length) throws BaseServiceException {
        Iterator objects = null;
        try {
            objects = baseDAO.getObjects(position, length);
        } catch (Exception ex) {
            throw new BaseServiceException("取所有信息集合时出错! " + ex.toString());
        }
        return objects;
    }
   
   
/**
  * 取记录集合总数
  * @return int
  */

public int getObjectsCount() throws
         BaseServiceException {
     int count = 0;
     try {
         count = baseDAO.getObjectsCount();
     } catch (Exception ex) {
         throw new BaseServiceException(" 取指定版块记录集合总数时出错! " + ex.toString());
     }
     return count;
}


   
/**
     * 取指定版块记录集合
     * @return Iterator
     * @param boardId String, position int, length int
     */

    public Iterator getObjects(String boardId, int position, int length) throws
            BaseServiceException {
        Iterator objects = null;
        try {
            objects = baseDAO.getObjects(boardId, position, length);
        } catch (Exception ex) {
            throw new BaseServiceException("取特定所有信息集合时出错! " + ex.toString());
        }
        return objects;
    }

   
/**
     * 取指定版块记录集合总数
     * @return int
     * @param String boardId
     */

    public int getObjectsCountByBoard(String boardId) throws
            BaseServiceException {
        int count = 0;
        try {
            count = baseDAO.getObjectsCountByBoard(boardId);
        } catch (Exception ex) {
            throw new BaseServiceException(" 取指定版块记录集合总数时出错! " + ex.toString());
        }
        return count;
    }


   
/**
     *
     * @return IBaseDAO
     */

    public IBaseDAO getBaseDAO() {
        return baseDAO;
    }

   
/**
     *
     * @param boardTreeDAO IInfoTreeDAO
     */

    public void setBaseDAO(IBaseDAO baseDAO) {
        this.baseDAO = baseDAO;
    }
   
/**
     * 设置一个特点的service域
     * @param service Class
     */

    public void initBaseService(Class service){
        baseDAO.init(service);
    }
}




测试文件
java代码: 


package common.spring.service;

import junit.framework.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import oa.pojo.*;

/**
* <p>Title: OA1.0</p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2004</p>
*
* <p>Company: </p>
*
* @author 段洪杰
* @version 1.0
*/

public class TestBaseService extends TestCase {
    private IBaseService baseService = null;
    private ApplicationContext ac;
   
    protected void setUp() throws Exception {
        super.setUp();
        ac = new FileSystemXmlApplicationContext("F:/jbproject/oa_1_0/web/WEB-INF/applicationContext-hibernate.xml");
        baseService =(IBaseService) ac.getBean("baseService");
    }

    protected void tearDown() throws Exception {
        super.tearDown();
    }
   
/**
     *  录入测试
     * @throws Exception
     */

   
/*
    public void testSetObject() throws Exception {
       Cart c=new Cart();
       c.setTitle("input service1111");
       baseService.setObject(c);
       // assertEquals("return value", expectedReturn, actualReturn);
   
     }*/

   
/**
    * 查询总记录数测试
    * @throws Exception
    */

   public void testgetObjectCount() throws Exception {
       Cart c=new Cart();
       baseService.initBaseService(c.getClass());
       int count =baseService.getObjectsCount();
       assertEquals("return value", "22", count+"");
       
       User u=new User();
      baseService.initBaseService(u.getClass());
      int count1 =baseService.getObjectsCount();
      assertEquals("return value", "13", count1+"");

   }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值