我正在爲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執行多個對象提取是否有開銷?對於正確的方法過於困惑,抱歉這麼長時間的解釋!