0

我需要 Josh Long 的“春季食谱”一书中的示例帮助。尝试使用持久层扩展 Spring @MVC 一章的代码示例。作者硬编码所有数据。我正在为这样的模型、数据库模式设计和基于 DAO 的 POJO 数据群寻找最佳实践解决方案。我不想使用 Hibernate 或 JPA,只想使用 Spring。

这是我正在练习的模型(省略了获取器和设置器以减少空间):

public class Reservation {

    private String courtName;
    private Date date;
    private int hour;
    private Player player;
    private SportType sportType;

}

public class Player {

    private String name;
    private String phone;

}

public class SportType {

    private int id;
    private String name;

}

我制作了 3 个 DB 表:reservation、player、sport_type。对于每个表,我都有 DAO 类:ReservationDao、PlayerDao、SportTypeDao。那是正确的方法吗?

这种对象设计需要数据库中的哪种关系?

如何在我的服务层中填充 Reservation 对象?我是否必须使用带有一些连接的查询或一一调用 ReservationDao、PlayerDao 和 SportTypeDao 方法才能从数据库中获取单个 Reservation 行?

4

1 回答 1

2

我会给你一些可能有争议的想法,但这是一个设计问题,所以它会被固执己见。

如果可能的话,我不会制作 DAO,只制作一个服务层并使用多重内连接查询所有三个表(即连接PlayerSportType)。原因是如果您要使用直接 SQL,您不妨利用数据库(除了大多数 ORM 很可能也会急切地加载)。

因为在手动 SQL webapps 中,您需要根据不同的查询和视图创建许多类似组合的对象,我发现 DAO 间接寻址完全浪费时间。如果你真的想要 DAO OOP,你应该使用 ORM。否则,请考虑更多的功能/过程编程风格的手动 SQL,您总是在转换数据 (DTO)。因此,您更喜欢干净但乏味(而且不是那么干燥)的转换,而不是把域对象推到所有地方。

您还应该知道 Spring 有将 JDBC 映射ResultSet到 Java Bean的简单方法。

于 2013-09-28T16:40:00.963 回答