gpt4 book ai didi

java - DAO 调用 DAO、DAO 调用服务还是 SQL 连接?

转载 作者:行者123 更新时间:2023-12-02 10:09:47 28 4
gpt4 key购买 nike

所以我正在编写一个个人项目来学习 Web 编程,并且我遇到了 DAO 模式。我构建了一些类(模型),并且像几乎所有程序一样,它们是嵌套的(例如:类 Payment 具有对 Author 实例的引用)。仅供引用,我没有使用任何映射器(将在以后的迭代中添加它们,并且我使用 JDBC,而不是 JPA)。

我的问题是这样的:

当我创建 PaymentJdbcDao 时,我有一个方法将返回一些付款,但为了从数据库存储对象创建此付款,我还必须到达作者(存储在单独的表中)。

我是否应该从 PaymentJdbcDao 调用 UserJdbcDao 以获得付款的作者,是否应该使用联接更改查询以从两个实体检索字段,是否应该 PaymentJdbcDao 调用 UserService (我认为这不好,因为服务位于 daos 之上的层上),或者我应该将作者引用作为对象删除并仅保留对author_id的引用?

哪种 abobe 是完成此任务更合适的方法?或者还有其他更好的做法吗?

谢谢。

最佳答案

我将我的 DAO (DataAccessObjects) 称为“存储库”。

Spring Data JPA 也在这样做。

所以我会创建一个 UserRepository 和 PaymentRepository。

存储库可以被其他存储库或服务调用。

存储库永远不应该调用服务。

用户界面 -> 服务 -> 存储库。

您的 PaymentRepository 可以返回这样的实体

public class PaymentEntity{
private long id;
private DateTime dateTime;
private UserEntity user;
}

您的 UserRepository 可以返回这样的实体

public class UserEntity{
private long id;
private DateTime lastLogin;
private List<PaymentEntity> payments;
}

您的存储库可能如下所示。

public interface PaymentRepository{

PaymentEntity getPaymentById(long id);
List<PaymentEntity> getAllPayments();
}


public interface UserRepository{

UserEntity getUserById(long id);
List<UserEntity> getAllUsers();
}

因此,您的 PaymentRepository 将调用 UserRepository 来获取您付款的用户。

您的 UserRepository 将调用 PaymentRepository 来获取所有用户的付款

希望能帮到你

关于java - DAO 调用 DAO、DAO 调用服务还是 SQL 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55081478/

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