猿问

DAO调用DAO,DAO调用服务还是SQL加入?

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

我的问题是这样的:

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

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

哪种abobe是实现这一目标的更合适的方法?还是其他更好的做法?


小唯快跑啊
浏览 96回答 1
1回答

红糖糍粑

我将我的DAO(DataAccessObjects)称为“存储库”。Spring Data JPA也在这样做。所以我会创建一个UserRepository和一个PaymentRepository。存储库可由其他存储库或服务调用。服务永远不应由存储库调用。UI ->服务 -> 存储库。您的付款存储库可能会返回这样的实体public class PaymentEntity{&nbsp; &nbsp; private long id;&nbsp; &nbsp; private DateTime dateTime;&nbsp; &nbsp; private UserEntity user;}您的用户存储库可能会返回这样的实体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();}因此,您的付款存储库将致电用户存储库以获取您的付款。您的用户存储库将调用付款存储库以获取所有用户的付款我希望我能够帮助你
随时随地看视频慕课网APP

相关分类

Java
我要回答