2 回答
TA贡献1801条经验 获得超15个赞
只有一种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 )来完成。
添加回答
举报