gpt4 book ai didi

java - dao设计模式中的数据传输对象

转载 作者:搜寻专家 更新时间:2023-10-31 20:12:40 26 4
gpt4 key购买 nike

我对 DTO 应包含哪些数据感到有点困惑。例如,假设我们有两个表:用户和订单。Orders 表包含 id_users,它是用户表的外键。

很明显,我有两个 DAO,MysqlUserDao 和 MysqlOrdersDao,带有 crud 操作,还有两个传输对象 User 和 Order,我在其中存储 jdbc 行集。

如果我想获取用户列表以及每个用户的所有订单我应该怎么做:

1) 在我的 MysqlUserDao 中创建一个函数:getUsersAndOrders(select users.,orders. from users join orders)我的用户 DTO 应该在我下订单的地方有一个 OrderList 属性?

2) 在我的 MysqlUserDao 中,我创建了一个函数 getAllUsers(select * from users),和 foreach 用户我使用 MysqlOrdersDao 函数 getOrder(id_user);

还有一些说明:

1) 我需要为数据库中的每个表创建一个 DAO 对象吗?还是只针对复杂的?比如产品和图片,应该是2道还是1道?

2) DTO 对象应该只有属性和 setter getter,或者可以有其他方法,如 convertEuroToUsd 等。

谢谢

最佳答案

在您的场景中,#1 是最佳选择,因为 #2 会产生太多开销。

1) 在我的 MysqlUserDao 中创建一个函数:getUsersAndOrders(select users.,orders. from users join orders) 我的 User DTO 应该在我下订单的地方有一个 OrderList 属性?

说明:1:如果你的数据库有一个很好的设计,那么每个表的一个 DAO 是一个很好的方法。在某些情况下,您可以将 DAO 合并在一起(例如:继承)。

2:是的。它应该是一个普通的 bean(如果需要,也可以是 POJO)。我建议创建另一个层,您可以在其中定义工作流。我似乎有人将这个额外的层称为模型,有时是 DataManager,有时只是 Manager。

例如:创建订单时,您应该在 Order 表中插入一条记录,并在 Notification 表中插入一条记录(因为每次创建订单时最终用户都会通过电子邮件收到通知)

class OrderManager {
private OrderDAO oDao;
private NotificationDao nDao;

public saveOrder(OrderDTO o) {
Long orderId = oDao.save(o);
NotificationDTO n = new NotificationDTO();
n.setType(NotificationType.ORDER_CREATED);
n.setEntityId(orderId);
nDao.save(n);
}
}

更新:在大多数情况下,我们可以这样说:

  • “经理”可能会处理许多 DAO;
  • DAO 不应包含其他 DAO 并与 DTO 相关联;
  • DTO 可以包含其他 DTO

在处理集合时,有一个重要的 LAZY 或 EAGER 负载思想。但这是另一个主题 :D

关于java - dao设计模式中的数据传输对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17624287/

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