我见过的大多数DAO示例都包含仅涉及一个表的简单查询。
我正在努力重构没有DAO的项目,该项目包含大量使用多个表的SQL查询。我的问题是如何最好地为DAO设计模型?在下面的示例中,我可以创建一个涵盖每个特定查询的对象。但是我不确定这是否是好的做法。例如有一个对象代表每个数据库表更好吗?
CustomerPaymentDAO以涵盖此查询:
select
a.username,
p.creation_date,
p.amount,
c.card_type
from
account a,
payment p,
payment_type t,
payment_card c
where
...
CustomerPurchaseDAO来涵盖此查询:
select
a.username,
i.name,
i.cost,
c.name,
v.value
from
account a,
item i,
category c,
voucher v
where
...
答案 0 :(得分:1)
一般来说,有两种选择:
创建与每个表对应的实体,并指定必要的关系(多对多,多对一,一对一)。
在数据库中为每个查询创建一个视图,并在每个视图的基础上创建实体(在您的示例中 - 两个视图+两个实体)。
第二种情况适用于只读对象。如果需要创建/更新/删除实体,则需要创建与每个单独表对应的实体。