我需要帮助Josh Long的书“Spring Recipes”中的例子。尝试使用持久层从Spring @MVC章节扩展代码示例。作者硬编码了所有数据。我正在为这样的模型,数据库模式设计和基于DAO的POJO数据填充搜索最佳实践解决方案。我不想使用Hibernate或JPA,只需使用Spring。
这是我正在练习的模型(省略了getter和setter以减少空间):
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表:预订,播放器,sport_type。对于每一张桌子,我都有DAO课程:ReservationDao,PlayerDao,SportTypeDao。这是正确的方法吗?
这些对象设计需要在数据库中建立什么样的关系?
如何在服务层中填充Reservation对象?我是否必须使用一个带有某些连接的查询,或者逐个调用ReservationDao,PlayerDao和SportTypeDao方法从数据库中获取单个预留行?
答案 0 :(得分:1)
我会给你一些可能引起争议的想法,但这是一个设计问题,所以它会被置之不理。
我不会制作DAO,只创建一个服务层,并在可能的情况下使用多个内连接查询所有三个表(即连接Player
和SportType
)。原因是如果您打算使用直接SQL,您也可以利用数据库(除了大多数ORM之外,最有可能也会急切加载)。
因为在手动SQL Web应用程序中,您需要根据不同的查询和视图创建许多复合类对象,我发现DAO间接完全浪费时间。如果你真的想要DAO OOP,你应该使用ORM代替。否则,请考虑手动SQL更多功能/过程编程风格,而您始终在转换数据(DTO)。因此,你最好在整个地方推动域对象的干净但繁琐(而不是那么干)的转换。
你也应该知道Spring有简单的map JDBC ResultSet
to Java Bean方法。