我目前正在使用 3 层 ui-service-dao 开发应用程序。在 dao 级别,我使用的是 Spring 的 jdbcTemplate 。到目前为止一切顺利,但我遇到了一种情况,我想了解更多

我的 DAO 一开始只有简单的 CRUD 方法。在服务级别,我正在检查输入值并委托(delegate)给 DAO 并处理交易。

现在我需要更像下面这样的东西

列出 getAllBooksByAuthorName(String name)

我的问题是把这个放在哪里?在DAO层使用sql或在service中使用CRUD的核心方法并在java中简单计算

我宁愿尽量使用sql,而不是在服务层计算。但是现在似乎对于每个新方法,我还需要更改 DAO 的接口(interface)并在服务的接口(interface)中创建相应的方法。然后服务就变成了委托(delegate)人和参数检查器。感觉不太对。

最佳答案

您的意见非常有效,但我不太明白您为何有疑问。通常,DAO 模式会减少业务逻辑和持久性逻辑之间的耦合。

public interface BooksDAO{
   public boolean save(Book book);
   public boolean update(Book book);
   public boolean findByBookIsbn(int isbn);
   public boolean delete(Book book);
   //here is what you want
   public List<Book> getAllBooksByAuthorName(String name);
}

现在,您可以为 BooksDao 提供不同的实现,例如 HibernateBooksDaoImpl 或 JdbcBooksDAOImpl。 DAO 模式使编写隔离的 junit 测试变得容易并且执行速度更快。

如果您有复杂的查询,您仍然可以使用 dao 模式。无论是简单的jdbc(可以使用sql)还是spring jdbc模板(仍然可以使用sql)或hibernate使用标准,基本上都可以在实现端编写复杂的查询。
看:
http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/Criteria.html

有关更多信息,请查看:

http://javarevisited.blogspot.com/2013/01/data-access-object-dao-design-pattern-java-tutorial-example.html
http://www.oracle.com/technetwork/articles/entarch/spring-jdbc-dao-101284.html

关于java - 三级架构中的 DAO 模式。如何处理复杂的查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23721636/

10-11 07:50