2 回答
TA貢獻1801條經驗 獲得超16個贊
只有一種POJO型號
我同意,一般來說,對和庫使用相同的POJO結構并不是最好的選擇。但這也取決于您需要實現的給定場景。在您的情況下,您需要從中加載數據并將結果存儲在. 因此,基本上您將在 90% 的情況下調用查詢。因此,您可以保持結構非常簡單,而不必擔心任何問題。在這種情況下,使用相同的結構并不是那么糟糕。鏈接的問題/答案僅說明閱讀和揭示結構的問題,在這個問題中不是這種情況。HibernateJacksonREST APIDBINSERTPOJOlazy-loadingPOJODBREST API
您還需要了解DB模型與JSON模型的不同之處。如果它們相似并且您可以說1:1沒有必要創建額外的圖層。
兩種POJO型號
在這種情況下,您需要創建兩個POJO模型:一個用于處理JSON反序列化,一個用于處理DBvia 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 )來完成。
添加回答
舉報
