所以我的问题是在我的项目中,我在我的服务类中使用模型映射器。因此,当服务调用 Dao 层(实际上只是一个 JPA Repository 接口)时,Dao 层现在成功返回实体而不是仅返回实际实体,我首先将其转换为 DTO(这是实体的精确副本)使用java的模型映射器。因为我不想直接公开我的实体。代码示例:public class FormService { @Autowired private FormMasterDao formMasterDao; @Autowired private ModelMapper mapper; public FormMasterDTO save(FormMasterDTO formMasterDTO) { FormMaster formMaster = buildFormMaster(formMasterDTO); return convertToFormMasterDTO(formMasterDao.save(formMaster)); } public List<FormMasterDTO> findById(String id) { return formMasterDao.findByIdIn(id) .stream() .map(this::convertToFormMasterDTO) .collect(toList()); } public void updateAll(List<FormMasterDTO> formMasterDTOList) { formMasterDao.saveAll(formMasterDTOList.stream() .map(this::convertToFormMaster) .collect(toList())); } public FormMasterDTO update(FormMasterDTO formMasterDTO) { return convertToFormMasterDTO(formMasterDao.save(convertToFormMaster(formMasterDTO))); } private FormMasterDTO convertToFormMasterDTO(FormMaster formMaster) { return mapper.map(formMaster, FormMasterDTO.class); } private FormMaster convertToFormMaster(FormMasterDTO formMasterDTO) { return mapper.map(formMasterDTO, FormMaster.class); }}我发现这种方法很有用,因为如果许多开发人员工作和编写代码,他们就不能直接使用实体。但我想知道,使用这种方法是否不好?会,它会影响 JVM,因为每次有人点击服务时,我都会将其转换为 DTO。
1 回答
拉丁的传说
TA贡献1789条经验 获得超8个赞
如果您担心从纯 JPA 对象转换为 DTO 的时间成本,那么请不要担心。这是为什么。
与许多其他操作相比,对象分配确实很慢,但与 IO 相比一点也不慢。我确信您的 JPA 服务会从数据库中获取一些东西。如果我是对的,那么突然间您花在新对象分配上的时间(以及以后产生的 GC 成本)将少于您花在 DB 操作本身上的时间的 0.01%。
如果您针对速度进行了优化,减少内存分配是一个好主意,但到目前为止,这应该不是您要做的第一件事。只有在优化成本更高的操作(例如数据库查询)之后才有意义。
免责声明: 在某些情况下,您的 DTO 会被证明是昂贵的。如果您碰巧在 JPA 对象中使用延迟加载,那么您即将进行的 DTO 转换将完全击败它。延迟加载将允许 JPA不获取JPA 对象图的某些子元素,但作为 DTO 转换的一部分,您每次都会请求“可选”数据,这反过来会使您回到开始使用Lazy
.
添加回答
举报
0/150
提交
取消