我正在为 Web 应用程序使用 Java + Spring 框架。我没有使用任何 ORM 工具。相反,我试图使用简单的 DAO/DTO 模式将数据库关系建模为 Java 对象。只要 DTO 与数据库中的单个表完全对应,它就非常简单。但是如果有表使用外键引用其他表,我不确定什么是最好的方法。在 Stackoverflow 中寻找类似的答案,但找不到我需要的答案。我想举一个非常具体的例子——假设有两个实体用户和组。我有一个用户 DTO 和一个组 DTO,每个 DTO 分别有 UserDao(JdbcUserDao) 和 GroupDao(JdbcGroupDao)。
现在我在数据库中有一个连接用户和组的关系。一个用户可以属于多个组。表名为 User_Group_Association,具有以下 DB 定义:
用户 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 用例:我想显示用户名和他们所属的相应组名。像这样的东西-
名称 -> 组名
Keshav -> 管理员、最终用户、ReportAdmin
Kiran -> 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 应该只对应一个表,关联的对象应该聚合在应用层。那有从数据库中获取多个对象的开销吗?对正确的方法太困惑了,抱歉这么长的解释!