2 回答

TA貢獻1801條經驗 獲得超16個贊
只有一種POJO
型號
我同意,一般來說,對和庫使用相同的POJO
結構并不是最好的選擇。但這也取決于您需要實現的給定場景。在您的情況下,您需要從中加載數據并將結果存儲在. 因此,基本上您將在 90% 的情況下調用查詢。因此,您可以保持結構非常簡單,而不必擔心任何問題。在這種情況下,使用相同的結構并不是那么糟糕。鏈接的問題/答案僅說明閱讀和揭示結構的問題,在這個問題中不是這種情況。Hibernate
Jackson
REST API
DB
INSERT
POJO
lazy-loading
POJO
DB
REST API
您還需要了解DB
模型與JSON
模型的不同之處。如果它們相似并且您可以說1:1
沒有必要創建額外的圖層。
兩種POJO
型號
在這種情況下,您需要創建兩個POJO
模型:一個用于處理JSON
反序列化,一個用于處理DB
via ORM
。在這種情況下,最大的問題是映射這兩個模型。此外,變化會REST API
傳播到每一層。您當然可以使用Dozer、Orika、MapStruct或其他地圖庫,但始終需要維護該圖層。從另一方面來看,這是非常安全的解決方案,因為您可以分別控制到JSON
和到的映射DB
并保持不同的結構,而無需許多注釋或自定義反序列化器、適配器等。另一方面,如果這兩個模型確實不同,則此解決方案是最好的。
集合和一個POJO
模型
我還看到了第三個選項,它使用Java
集合庫來處理JSON
有效負載。JSON Object
適合Map<String, Object>
和JSON array
適合List<Object>
。Jackson
自動注意選擇正確的類型,您只需將這些集合映射到側面POJO
使用的模型ORM
。該解決方案消除了保留兩個模型的需要,但它使映射層復雜化并使其模糊。
根據您提供的信息,我將從第一個選項開始。以防萬一,在某些庫的幫助下生成額外的模型和映射層變得復雜,這應該不是什么大問題。

TA貢獻1808條經驗 獲得超4個贊
一般來說,這種方法是正確的。但細節取決于您將要使用的框架/ORM(如果有的話)。
如果您想使用 JPA/Hibernate 進行持久性 - 您需要一個實體類,它永遠不應該用作 DTO。如果您有一些自定義持久性,您可能完全跳過實體類,而只使用 DTO 來填充查詢參數。
但是實現這種解決方案的最簡單和最常見的方法是使用 Spring 框架,該框架將使用 Jackson 自動將您的 JSON 映射到 DTO,并使用 Spring Data JPA 進行持久性。
在這種情況下,剩下的唯一工作就是將 DTO 映射到實體。這可以手動實現,但也可以使用會生成映射器的框架(如MapStruct )來完成。
添加回答
舉報