Java 为现有项目设计DAO模型

Java 为现有项目设计DAO模型,java,dao,Java,Dao,我看到的大多数DAO示例都由只涉及一个表的简单查询组成 我正在重构一个没有DAO的项目,该项目有很多SQL查询,其中使用了多个表。我的问题是如何最好地为DAO设计模型?在下面的示例中,我可以创建一个覆盖每个特定查询的对象。但是我不确定这是否是一个好的练习。e、 g.用一个对象表示每个db表是否更好 要涵盖此查询的CustomerPaymentDAO: CustomerPurchaseDAO以涵盖此查询: 一般来说,有两种选择: 创建对应于每个表的实体,并指定必要的关系(多对多、多对一、一对一

我看到的大多数DAO示例都由只涉及一个表的简单查询组成

我正在重构一个没有DAO的项目,该项目有很多SQL查询,其中使用了多个表。我的问题是如何最好地为DAO设计模型?在下面的示例中,我可以创建一个覆盖每个特定查询的对象。但是我不确定这是否是一个好的练习。e、 g.用一个对象表示每个db表是否更好

要涵盖此查询的CustomerPaymentDAO:

CustomerPurchaseDAO以涵盖此查询:


一般来说,有两种选择:

  • 创建对应于每个表的实体,并指定必要的关系(多对多、多对一、一对一)

  • 在数据库中,为每个查询创建一个视图,并基于每个视图创建实体(在您的示例中为两个视图+两个实体)


  • 第二种情况适用于只读对象。如果需要创建/更新/删除实体,则需要创建对应于每个表的实体

    在OO中,DAO通常返回一个对象或该对象的集合,并且DAO与之链接。然后导航关系以从相关对象获取值。但是你可以自由地做看起来最合乎逻辑的事情。只要DAO层封装了用于访问数据的技术手段(excel文件、通过Hibernate的数据库、通过JDBC的数据库)
    select
        a.username,
        p.creation_date,
        p.amount,
        c.card_type
    from
        account      a,
        payment      p,
        payment_type t,
        payment_card c
    where
    ...
    
    select
        a.username,
        i.name,
        i.cost,
        c.name,
        v.value
    from
        account      a,
        item         i,
        category     c,
        voucher      v
    where
    ...