DAO调用DAO,DAO调用服务还是SQL join?

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

我的问题是这样的:

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

我是否应该从 PaymentJdbcDao 调用 UserJdbcDao 以获取付款的作者,我是否应该使用联接更改查询以从两个实体中检索字段,如果 PaymentJdbcDao 调用 UserService(我认为这不好,因为服务已开启daos 之上的层),还是应该将作者引用作为一个对象删除,只保留对 author_id 的引用?

上面哪一个是更合适的方法来实现这一点?或者还有其他更好的做法吗?

谢谢。


呼啦一阵风
浏览 164回答 1
1回答

HUWWW

我将我的 DAO (DataAccessObjects) 称为“存储库”。Spring Data JPA 也在这样做。所以我会创建一个 UserRepository 和一个 PaymentRepository。存储库可以被其他存储库或服务调用。存储库永远不应调用服务。UI -> 服务 -> 存储库。您的 PaymentRepository 可能会返回这样的实体public class PaymentEntity{&nbsp; &nbsp; private long id;&nbsp; &nbsp; private DateTime dateTime;&nbsp; &nbsp; private UserEntity user;}您的 UserRepository 可以返回这样的实体public class UserEntity{&nbsp; &nbsp; private long id;&nbsp; &nbsp; private DateTime lastLogin;&nbsp; &nbsp; private List<PaymentEntity> payments;}您的存储库可能如下所示。public interface PaymentRepository{&nbsp; &nbsp; PaymentEntity getPaymentById(long id);&nbsp; &nbsp; List<PaymentEntity> getAllPayments();}public interface UserRepository{&nbsp; &nbsp; UserEntity getUserById(long id);&nbsp; &nbsp; List<UserEntity> getAllUsers();}因此,您的 PaymentRepository 将调用 UserRepository 以获取用户进行付款。并且您的 UserRepository 将调用 PaymentRepository 以获取所有用户付款我希望我能帮助你
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java