我正在为Web应用程序使用Java + Spring框架。我没有使用任何ORM工具。相反,我试图使用简单的DAO/DTO模式将db关系建模为Java对象。只要DTO完全对应于数据库中的单个表,它就非常简单。但是如果有使用外键引用其他表的表,我不确定最佳方法是什么。在Stackoverflow中看到了类似的答案,但找不到满足我需求的答案。我想举一个非常具体的例子 - 假设有两个实体User和Group。我有一个用户DTO和组DTO,每个用户都有UserDao(JdbcUserDao)和GroupDao(JdbcGroupDao)。设计具有外键关系的DTO
现在我在DB中有一个连接用户和组的关系。一个用户可以属于多个组。表名是User_Group_Association,它具有以下数据库定义:
user_id | group_id
这里user_id是引用用户表的外键。同样,group_id指的是组表。当我在Java中,这DTO模式,我应该做这样的事情:
public class UserGroupAssoc {
private int userId;
private int groupId;
//Setters and getters follow
}
还是应该是这样的:
public class UserGroupAssoc {
private User user;
private Group group;
//Setters and getters follow
}
特定UI使用案例:我想显示用户名和相应的组它们所属的名称。像这个 -
名称 - >组名
凯沙夫 - >联系,最终用户,ReportAdmin
基兰 - > ReportAdmin
Pranav - >终端用户
在第一种方法DTO的设计,我将需要再次从数据库中获取用户详细信息(名称)和组详细信息(名称)。在第二种方法中,当我构造UserGroupAssoc对象时,我需要获取User和Group对象。
大概在第三种方法我可以设计UserGroupAssoc DTO如下:
public class UserGroupAssoc {
private String userName;
private String groupName;
private int userId;
private int groupId;
//Setters and getters follow
}
在这第三种方法,我同表中的SQL只获得了用例所需的字段,然后建模相应的DTO。
哪种标准方法可以实现这种情况?在DTO设计中加入表格是否正确?有些人认为,一个DTO应该只对应于一个表,并且关联的对象应该聚合在应用层中。那对于从DB执行多个对象提取是否有开销?对于正确的方法过于困惑,抱歉这么长时间的解释!