当前位置: 首页 > 知识库问答 >
问题:

是否将实体对象或POJO返回到UI?

羊舌兴文
2023-03-14

我有JPA雇员持久实体wjich有50个字段。有时我需要将所有50个字段显示到用户界面,或者有时比这少得多。

我能想到两种方法

方法1:-

我将继续将员工实体返回到UI。有一些方法(带有注释)可以让我提到需要返回Employee下的哪些特定字段

例子:-

如果我想在将json返回到浏览器之前忽略Employee类中的MiddleName,我将创建EmployeeMixin,其中包含所需的@JsonIgnoreProperties,如下所示

@JsonIgnoreProperties({"MiddleName"})
public abstract class EmployeeMixin extends Employee{

}




Employee employee = new Employee ();
Map<Class<?>, Class<?>> mixinMap = new HashMap<Class<?>, Class<?>>();
mixinMap.put(Employee.class, EmployeeMixin.class);
ObjectMapper mapper = new ObjectMapper(mixinMap);
return mapper.writeValueAsString(employee);

方法2:-

我将制作新的POJO,再次包含所有5o字段,并返回到UI。

我的问题是哪种设计方法更好?我应该返回实体对象或新的Pojo对象(从实体构建)到UI?

共有1个答案

太叔英卫
2023-03-14

我更喜欢方法3,投影

  • 创建一个DTO对象为每种情况下一个变量集的字段,你需要。
  • 创建相应的JPQLCriteriaQuery来填充适当的DTO

有一个实体

@Entity
@Getter
public class Pojo3 {
   @Id
   @GeneratedValue
   private Long id;
   @Setter
   private String f1, f2,f3;
}

您可以创建一个DTO类,其中包含如下字段的子集

@Getter @Setter
@AllArgsConstructor // Pojo2DTO(id,f1,f2)
public class Pojo2DTO {
   private Long id;
   private String f1,f2;
}

可以在JPQL中填充,如本测试所示

@Test
@Transactional
public void test() {
   Pojo3 pojo3 = new Pojo3();
   pojo3.setF1("f1");
   pojo3.setF2("f2");
   pojo3.setF3("f3");      
   em.persist(pojo3);

   // **NOTE** the full package path to DTO object
   TypedQuery<Pojo2DTO> tq = em.createQuery(
         "SELECT NEW org.example.jpa.manyfields.Pojo2DTO(p3.id, p3.f1, p3.f2) "
      + " FROM Pojo3 p3 WHERE p3.id=:id", Pojo2DTO.class);
   tq.setParameter("id", pojo3.getId());

   Pojo2DTO pojo2dto = tq.getSingleResult(); 
   log.info("{}, {}, {}", pojo2dto.getId(), pojo2dto.getF1(), pojo2dto.getF2());

}
 类似资料:
  • 问题内容: 我试图在这里得到两个非常相似的问题的答案: 我应该将实体转换为Repository对象内的DTO并将其返回到服务层吗? 要么 从存储库层返回DTO对象可以吗? 现在,我被困在Servlet(服务层)中,例如,尝试从中检索所有对象: 带注释的类在哪里- 这似乎是我不应该做的第一件事,因为服务层现在知道一个非常低级的对象,恕我直言违反了在每一层抽象我的数据的尝试。 如果我将每个实例都转换为

  • 本文向大家介绍MyBatis-Plus 查询返回实体对象还是map,包括了MyBatis-Plus 查询返回实体对象还是map的使用技巧和注意事项,需要的朋友参考一下 在常见场景下:返回数据建议使用map,不建议使用实体对象 遇到了这个问题,迷惘,遂问大神,大神曰:如果是组合体,就用map;如果是单体实体,就用实体。实体类对应单表,多表返回用map。 我想省事全用map,但是那我学了面向对象是用来

  • 问题内容: 我在我的项目中使用spring data JPA。我正在玩数百万条唱片。我有一个要求,我必须获取各种表的数据并构建一个对象,然后将其绘制在UI上。现在如何实现我的Spring数据存储库。我读过它可以通过命名本机查询来实现。 如果命名的本机查询未返回实体或实体列表,则可以使用@SqlResultSetMapping批注将查询结果映射到正确的返回类型。 但是,当我尝试使用它时,将采用另一个

  • 我正在我的项目中使用Spring Data JPA。我在玩数百万张唱片。我有一个要求,我必须为各种表获取数据,构建一个对象,然后在UI上绘制它。现在如何实现我的spring数据仓库。我读过,它可以通过命名的本机查询来实现。 如果命名的本机查询没有返回实体或实体列表,我们可以使用@SqlResultSetMapping注释将查询结果映射到正确的返回类型。 但是当我试图使用时,它会使用另一个Entit

  • 我在这里试图得到两个非常相似的问题的答案: 我是否应该在存储库对象中将实体转换为DTO,并将其返回到服务层? 其中是一个注释类-这似乎是我不应该做的第一件事,因为服务层现在知道了一个非常低级别的对象,它违反了在每一层抽象数据的尝试。 如果我将每个转换为,情况就不是这样了--但是我应该这样做吗? 基本改变: 但这对我来说不是最好的解决办法…我在这里能做什么? 要提到的一件重要事情是,它来自GWT项目

  • 我正在阅读格式的JSON: 我将“student”存储到一个字符串中,并将每个学生的详细信息——“roll,name,subjects”存储到POJO中。 > ObjectMapper mapper=new ObjectMapper(); Map 返回某个学生的所有主修和辅修课程的最佳方式是什么?我应该做一个hashmap还是列表?或者还有别的办法吗?