【问题标题】:Should Service Layer know about Stored procedures and parameters?服务层应该知道存储过程和参数吗?
【发布时间】:2011-10-17 14:44:21
【问题描述】:

我们在 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
     }
 }

这真的是正确的方法吗?

附:存储过程处理不同的数据库表,因此它们不属于特定的 DAO 实现。

【问题讨论】:

    标签: hibernate spring


    【解决方案1】:

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

    【讨论】:

    • 它们是必不可少的,Ryan,实际上几乎是应用程序的核心,尽管只有 5 个 SP。很多计算发生。而且我不知道他们为什么决定在存储过程中这样做。所以是的。我被它困住了。
    • 所以是的,我会说服务层中的 SP 的知识听起来是合适的,因为它们是应用程序的主要部分。您可能会考虑的一件事是将它们从您的 DAO 层次结构中分离出来,因为正如您所说,它们不属于任何一种 DAO。给他们自己的家可能会更好,比如“StoredProcedureManager”或类似的东西。
    • 谢谢瑞恩。我现在实现了自己的 StoredProcedureManager 来处理多个存储过程。 :-)
    猜你喜欢
    • 2015-04-27
    • 2021-11-14
    • 2010-11-24
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    相关资源
    最近更新 更多