gpt4 book ai didi

java - 3 层架构中的 DAO 模式。如何处理复杂查询

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:47:59 24 4
gpt4 key购买 nike

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

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

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

List getAllBooksByAuthorName(字符串名称)

我的问题是把这个放在哪里?在DAO层使用sql或在服务中使用增删改查的核心方法并在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 - 3 层架构中的 DAO 模式。如何处理复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23721636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com