DAO调用DAO,DAO调用服务还是SQL连接?

问题描述 投票:0回答:1

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

我的问题是:

当我创建PaymentJdbcDao时,我有一个方法会返回一些Payment,但是为了从数据库存储对象创建这个支付,我必须也到达Author(存储在一个单独的表中)。

我应该从PaymentJdbcDao调用UserJdbcDao以获取付款的作者,如果我使用连接更改查询以从两个实体检索字段,如果PaymentJdbcDao调用UserService(我认为这不好,因为服务已打开)图层abobe daos),或者我应该删除作者参考作为对象,只是持有对author_id的引用?

以上哪一项是更合适的方法来实现这一目标?或者是其他任何更好的做法?

谢谢。

java web dao
1个回答
1
投票

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

Spring Data JPA也在这样做。

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

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

服务器永远不应该调用服务。

UI - >服务 - >存储库。

您的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以获取所有用户的付款

我希望我能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.