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