• Dto和Entity如何优雅的相互转换


    什么是Dto,Entity,用来干什么?

        Dto data transfer object 数据传输实体,主要用于数据传输的实体模型;
        Entity 持久层的领域模型;
         当我在做分布式微服务的时候,通常是用Entity来做持久层的实体类,Dto来做接口传输的实体类。这个时候就有一个麻烦事,Entity和Dto的互转。通常的转换方法有两个途径,一个是通过反射的方式,来进行对象属性的复制;另一种是,通过硬编码进行对象属性的赋值;

    1. 在service层中添加实体类转换函数
    @Service
    public MyEntityService {
    
      public SomeDto getEntityById(Long id){
        SomeEntity dbResult = someDao.findById(id);
        SomeDto dtoResult = convert(dbResult);
        // ... more logic happens
        return dtoResult;
      }
    
      public SomeDto convert(SomeEntity entity){
       //... Object creation and using getter/setter for converting
      }
    }
    
    2. 在各自的实体类中添加转换函数
    public class SomeDto {
    
     // ... some attributes
    
     public SomeDto(SomeEntity entity) {
      this.attribute = entity.getAttribute();
      // ... nesting convertion & convertion of lists and arrays
     }
    
    }
    
    
    3. 通过反射的方式来进行,目前有common-beanutils,或者springframework的beanutils,或者modelmapper进行更复杂的定制。这样做得有点就是完全没有额外的编码负担,且通用性强;但是缺点是,性能很低(这里可能比硬编码的转换方式多上100倍时间左右)所以对于大数据量的转换,或者对反应时间敏感的场景,请不要使用;
    ModelMapper modelMapper = new ModelMapper();
    UserDTO userDTO = modelMapper.map(user, UserDTO.class);
    
    4. 通过mapstruct在编译阶段,创建一个convert类,来进行转化,优点是自动代码生成,转换效率优良;缺点是虽然省略的硬编码,但是每个实体都需要写一个转换接口,着实不是很优雅。
    @Mapper
    public interface SheetConverter {
    
        @Mappings({})
        SheetDto sheetToSheetDto(Sheet sheet);
    
        @Mappings({})
        Sheet sheetDtoToSheet(SheetDto sheetDto);
    }
    
    
  • 相关阅读:
    linux查看内存占用情况
    tomcat JVM内存 配置
    Linux中iptables设置详细
    asmack xmpp 获取离线消息
    linux查看端口被哪个服务占用的命令
    Redis 3.0版本启动时出现警告的解决办法
    redis中密码设置
    linux安装(Ubuntu)——(二)
    Linux简介——(一)
    Android控件——ToggleButton多状态按钮(实现灯泡的开关)
  • 原文地址:https://www.cnblogs.com/IC1101/p/11308317.html
Copyright © 2020-2023  润新知