MapStruct解决数据传输对象转换的繁琐
每层有自己的数据传输对象,当数据流程到该层由需要将数据转成符合要求的格式,比如:当数据由应用层流转到服务层则需要将数据转成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解决数据传输对象转换的繁琐相关推荐
- 芋道 Spring Boot 对象转换 MapStruct 入门
点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2020 超神之路,很肝~ 中文详细注释的开源项目 RP ...
- Java对象转换方案分析与mapstruct实践
简介: 随着系统模块分层不断细化,在Java日常开发中不可避免地涉及到各种对象的转换,如:DO.DTO.VO等等,编写映射转换代码是一个繁琐重复且还易错的工作,一个好的工具辅助,减轻了工作量.提升开发 ...
- Java对象转换最佳方案
系统变的复杂,系统的层次划分越来越细,边界也越来越明确. 然后每一层之间一般都有自己要处理的领域对象,统称为pojo一般在model或者domain包下(类的后缀不能为pojo). 常见的一些模型类型 ...
- DTO(数据传输对象)模式
0. 写在前面 首先,这是一篇翻译文章,个人建议你可以阅读英文原文Baeldung: The DTO Pattern (Data Transfer Object),因为个人水平,很多地方翻译的不通顺和 ...
- ABP 详解系列2:解析ABP框架中的数据传输对象与应用服务
解析ABP框架中的数据传输对象与应用服务 ABP框架是基于ASP.NET的Web开发框架,在ABP中应用服务将领域逻辑暴露给展现层,展现层通过传入数据传输对象参数来调用应用服务,而这里我们就来解析AB ...
- 我写了个IDEA开源插件,vo2dto 一键生成对象转换
头炸,po2vo.vo2do.do2dto,一堆对象属性,取出来塞进来.要不是为了 DDD 架构下的各个分层防腐,真想一竿子怼下去. 那上 BeanUtils.copyProperties 呀,其实对 ...
- android 中XML和对象转换利器Xstream的使用
XStream框架: 虽说pull dom dom4j等优秀的xml解析工具使用非常广泛,但对于复杂庞大的数据交互来说,使用它们无疑让你倍加痛苦,你可能大部分精力都放在无聊繁琐的解析和拼装上,如果接口 ...
- json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值...
json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值 原文:json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值 主要内容: 一 ...
- DTO数据传输对象详解
文章目录 一.DTO是什么? 二.DTO解决的问题 三.代码演示 一.DTO是什么? DTO (数据传输对象) 数据传输对象(DTO),是一种设计模式之间传输数据的软件应用系统.数据传输目标往往是数据 ...
最新文章
- Windows 下连接mysql工具NavicatForMysql
- 开源FastGithub
- c语言 linker error,[Linker error] undefined reference to `prinf'的问题!
- RAC RMAN备份
- android自定义横向时间轴,Android自定义时间轴的实现过程
- Docker安装vi命令
- GitHub客户端 Desktop使用
- android字节流保存,android数据存储之文件存储方法
- javascript 闭包理解总结
- java实时监控系统_JavaMonitor
- 数据结构—— 家谱处理
- 双目立体匹配流程详解
- 获取 ProgramData 文件夹路径
- 微型计算机基础pdf,微型计算机硬件基础.pdf
- Android夜间模式最佳实践
- 黑色诺言_蝴蝶——壁纸 Win7
- 那些年,你与快递小哥的爱恨情仇...
- C语言指针(一)——什么是指针及指针的定义
- GlobalMapper20如何生成经纬网格、标准图幅(1:100万标准分幅)
- 【图像处理】图像拼接——图像配准、图像融合