我有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?
我更喜欢方法3,投影
DTO
对象为每种情况下一个变量集的字段,你需要。JPQL
或CriteriaQuery
来填充适当的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还是列表?或者还有别的办法吗?