服务层应该知道存储过程和参数吗?

时间:2011-10-17 14:44:21

标签: hibernate spring

我们在Hibernate3.6-Spring 3.1中有一个应用程序。

我有这样的通用DAO impl,(http://www.ibm.com/developerworks/java/library/j-genericdao/index.html

public abstract class  GenericDaoImpl<T, ID extends Serializable>  implements     GenericDao<T, ID>
{

  public int executeSP(final String SP_NAME, Map<String, Object> params)
  {
     SQLQuery sq = getSession().createSQLQuery(SP_NAME);                        
     sq.setProperties(params);       
     return sq.executeUpdate();

   } 
}

此服务实施

@Transactional
public class PejlAnalysisServiceImpl implements PejlAnalysisService, InitializingBean 
{   
      private CisternDao cisternDao;
      private PejlDataDao pejlDataDao;

      private GenericDao genericDao;  // <--  THIS?

     private void test()
     {
          Map<String, Object> params =  new HashMap<String, Object>();
          params.put("PARAM1",100); //AND THIS
          genericDao.executeSP("MY_STORED_PROCEDURE", params); //And THIS
     }
 }

这真的是正确的方法吗?

P.S。存储过程处理不同的数据库表,因此它们不属于特定的DAO impl。

1 个答案:

答案 0 :(得分:0)

这取决于你的设计。在我写的一个较小的项目中,我有一个StoredProcedure对象,其他组件使用,因为单个存储过程是存储数据的唯一方法。我建议首先避免使用存储过程,但是如果你坚持使用它们,你必须决定它们与你的设计的整合程度。它们是业务逻辑的基本部分,还是持久层的实现细节?