为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼啦一阵风 2022-07-27 20:18:43
所以我正在写一个个人项目来学习网络编程,我遇到了 DAO 模式。我已经构建了一些类(模型),并且像几乎所有程序一样,它们是嵌套的(例如:Payment 类具有对 Author 实例的引用)。仅供参考,我没有使用任何映射器(将在以后的迭代中添加它们,我使用的是 JDBC,而不是 JPA)。我的问题是这样的:当我创建 PaymentJdbcDao 时,我有一个方法会返回一些付款,但是为了从数据库存储的对象创建这个付款,我还必须到达作者(存储在单独的表中)。我是否应该从 PaymentJdbcDao 调用 UserJdbcDao 以获取付款的作者,我是否应该使用联接更改查询以从两个实体中检索字段,如果 PaymentJdbcDao 调用 UserService(我认为这不好,因为服务已开启daos 之上的层),还是应该将作者引用作为一个对象删除,只保留对 author_id 的引用?上面哪一个是更合适的方法来实现这一点?或者还有其他更好的做法吗?谢谢。
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

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


我希望我能帮助你


查看完整回答
反对 回复 2022-07-27
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号