每层有自己的数据传输对象,当数据流程到该层由需要将数据转成符合要求的格式,比如:当数据由应用层流转到服务层则需要将数据转成DTO格式,当数据由服务层流向持久层则需要将数据转成Entity格式数据

下边的代码数据由服务层流向持久层:

public MerchantDTO createMerchant(MerchantDTO merchantDTO) {Merchant entity = new Merchant();//设置审核状态0‐未申请,1‐已申请待审核,2‐审核通过,3‐审核拒绝entity.setAuditStatus("0");//设置联系人entity.setUsername(merchantDTO.getUsername());//设置手机号entity.setMobile(merchantDTO.getMobile());//...//保存商户信息merchantMapper.insert(entity);//将新增商户的id回写到merchantDTOmerchantDTO.setId(entity.getId());return merchantDTO;
}

上边代码的问题是:由merchantDTO转成entity实现过程繁琐。

MapStruct是一个代码生成器,它基于约定优于配置的方法大大简化了Java Bean对象之间的映射转换的实现。MapStruct 使用简单的方法即可完成对象之间的转换,它速度快、类型安全且易于理解。

官方地址:https://mapstruct.org/

1)添加依赖

在使用MapStruct的工程添加MapStruct依赖:

<dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct‐jdk8</artifactId>
</dependency>
<dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct‐processor</artifactId><version>${org.mapstruct.version}</version>
</dependency>

2)服务层对象转换

在商户服务工程定义商户对象转换类

定义MerchantConvert转换类,使用@Mapper注解快速实现对象转换

@Mapper
public interface MerchantCovert {MerchantCovert INSTANCE = Mappers.getMapper(MerchantCovert.class);MerchantDTO entity2dto(Merchant entity);Merchant dto2entity(MerchantDTO dto);
}

在MerchantCovert中定义测试方法:

public static void main(String[] args) {//dto转entityMerchantDTO merchantDTO = new MerchantDTO();merchantDTO.setUsername("测试");merchantDTO.setPassword("111");Merchant entity = MerchantCovert.INSTANCE.dto2entity(merchantDTO);//entity转dtoentity.setMobile("123444554");MerchantDTO merchantDTO1 = MerchantCovert.INSTANCE.entity2dto(entity);System.out.println(merchantDTO1);
}

List数据也可以转换:

在MerchantCovert中定义list的方法,如下:

//list之间的转换
List<MerchantDTO> listentity2dto(List<Merchant> list);

测试:

在main方法编写list之间的转换测试

//测试list之间的转换
List<Merchant> list_entity = new ArrayList<>();
list_entity.add(entity);
List<MerchantDTO> merchantDTOS = MerchantCovert.INSTANCE.listentity2dto(list_entity);
System.out.println(merchantDTOS);

3)应用层对象转换

在商户平台应用工程定义商户对象转换类

@Mapper
public interface MerchantRegisterConvert {MerchantRegisterConvert INSTANCE = Mappers.getMapper(MerchantRegisterConvert.class);MerchantDTO vo2dto(MerchantRegisterVO vo);MerchantRegisterVO dto2vo(MerchantDTO dto);
}

1、优化服务层代码

修改商户服务工程MerchantServiceImpl中的createMerchant方法:

public MerchantDTO createMerchant(MerchantDTO merchantDTO) {//将dto转成entityMerchant entity = MerchantCovert.INSTANCE.dto2entity(merchantDTO);//设置审核状态0‐未申请,1‐已申请待审核,2‐审核通过,3‐审核拒绝entity.setAuditStatus("0");//保存商户信息merchantMapper.insert(entity);//将entity转成 dtoMerchantDTO merchantDTONew = MerchantCovert.INSTANCE.entity2dto(entity);return merchantDTONew;
}

2、代码应用层代码

修改商户平台应用工程MerchantController中的registerMerchant方法:

@PostMapping("/merchants/register")
public MerchantRegisterVO registerMerchant(@RequestBody MerchantRegisterVO merchantRegister){//校验验证码smsService.verificationMessageCode(merchantRegister.getVerifiykey(),merchantRegister.getVerifiyCode());//注册商户MerchantDTO merchantDTO = MerchantRegisterConvert.INSTANCE.vo2dto(merchantRegister);merchantService.createMerchant(merchantDTO);return merchantRegister;
}

MapStruct解决数据传输对象转换的繁琐相关推荐

  1. 芋道 Spring Boot 对象转换 MapStruct 入门

    点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2020 超神之路,很肝~ 中文详细注释的开源项目 RP ...

  2. Java对象转换方案分析与mapstruct实践

    简介: 随着系统模块分层不断细化,在Java日常开发中不可避免地涉及到各种对象的转换,如:DO.DTO.VO等等,编写映射转换代码是一个繁琐重复且还易错的工作,一个好的工具辅助,减轻了工作量.提升开发 ...

  3. Java对象转换最佳方案

    系统变的复杂,系统的层次划分越来越细,边界也越来越明确. 然后每一层之间一般都有自己要处理的领域对象,统称为pojo一般在model或者domain包下(类的后缀不能为pojo). 常见的一些模型类型 ...

  4. DTO(数据传输对象)模式

    0. 写在前面 首先,这是一篇翻译文章,个人建议你可以阅读英文原文Baeldung: The DTO Pattern (Data Transfer Object),因为个人水平,很多地方翻译的不通顺和 ...

  5. ABP 详解系列2:解析ABP框架中的数据传输对象与应用服务

    解析ABP框架中的数据传输对象与应用服务 ABP框架是基于ASP.NET的Web开发框架,在ABP中应用服务将领域逻辑暴露给展现层,展现层通过传入数据传输对象参数来调用应用服务,而这里我们就来解析AB ...

  6. 我写了个IDEA开源插件,vo2dto 一键生成对象转换

    头炸,po2vo.vo2do.do2dto,一堆对象属性,取出来塞进来.要不是为了 DDD 架构下的各个分层防腐,真想一竿子怼下去. 那上 BeanUtils.copyProperties 呀,其实对 ...

  7. android 中XML和对象转换利器Xstream的使用

    XStream框架: 虽说pull dom dom4j等优秀的xml解析工具使用非常广泛,但对于复杂庞大的数据交互来说,使用它们无疑让你倍加痛苦,你可能大部分精力都放在无聊繁琐的解析和拼装上,如果接口 ...

  8. json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值...

    json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值 原文:json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值 主要内容: 一 ...

  9. DTO数据传输对象详解

    文章目录 一.DTO是什么? 二.DTO解决的问题 三.代码演示 一.DTO是什么? DTO (数据传输对象) 数据传输对象(DTO),是一种设计模式之间传输数据的软件应用系统.数据传输目标往往是数据 ...

最新文章

  1. Windows 下连接mysql工具NavicatForMysql
  2. 开源FastGithub
  3. c语言 linker error,[Linker error] undefined reference to `prinf'的问题!
  4. RAC RMAN备份
  5. android自定义横向时间轴,Android自定义时间轴的实现过程
  6. Docker安装vi命令
  7. GitHub客户端 Desktop使用
  8. android字节流保存,android数据存储之文件存储方法
  9. javascript 闭包理解总结
  10. java实时监控系统_JavaMonitor
  11. 数据结构—— 家谱处理
  12. 双目立体匹配流程详解
  13. 获取 ProgramData 文件夹路径
  14. 微型计算机基础pdf,微型计算机硬件基础.pdf
  15. Android夜间模式最佳实践
  16. 黑色诺言_蝴蝶——壁纸 Win7
  17. 那些年,你与快递小哥的爱恨情仇...
  18. C语言指针(一)——什么是指针及指针的定义
  19. GlobalMapper20如何生成经纬网格、标准图幅(1:100万标准分幅)
  20. 【图像处理】图像拼接——图像配准、图像融合

热门文章

  1. nginx生成自定义证书
  2. P1966 火柴排队
  3. 每周分享第8期(2019.5.25)
  4. Linux学习系列之Nginx调优实战
  5. C 实现基于角色的权限系统
  6. DevExpress 选择框如何进行模糊查询
  7. 构建之法阅读心得(二)
  8. JQuery:JQuery添加元素
  9. 机房重构 之 抽象工厂+反射+配置文件 实现数据库訪问
  10. so文件成品评论【整理】