第一次看到 MapStruct 的时候, 我个人非常的开心. 因为其跟我内心里面的想法不谋而合. 1 MapStruct 是什么? 1.1 JavaBean 的困扰 对于代码中 JavaBean之间的转换, 一直是困扰我很久的事情. 在开发的时候我看到业务代码之间有很多的 JavaBean 之间的相互转化, 非常的影响观感, 却又不得不存在. 我后来想的一个办法就是通过反射, 或者自己写很多的转换器. 第一种通过反射的方法确实比较方便, 但是现在无论是 BeanUtils, BeanCopier…
在前面, 介绍了 MapStruct 及其入门. 本文则是进一步的进阶. 在 MapStruct 生成对应的实现类的时候, 有如下的几个情景. 1 属性名称相同,则进行转化 在实现类的时候, 如果属性名称相同, 则会进行对应的转化.这个在之前的文章代码中已经有所体现. 通过此种方式, 我们可以快速的编写出转换的方法. 源对象类 import lombok.Data; @Data public class Source { private String id; private Integer nu…
前言 在我们日常开发的分层结构的应用程序中,为了各层之间互相解耦,一般都会定义不同的对象用来在不同层之间传递数据,因此,就有了各种 XXXDTO.XXXVO.XXXBO 等基于数据库对象派生出来的对象,当在不同层之间传输数据时,不可避免地经常需要将这些对象进行相互转换. 此时一般处理两种处理方式:① 直接使用 Setter 和 Getter 方法转换.② 使用一些工具类进行转换(e.g. BeanUtil.copyProperties).第一种方式如果对象属性比较多时,需要写很多的 Getter…
MapStruct GitHub 访问地址 : https://github.com/mapstruct/mapstruct/ 使用例子 : https://github.com/mapstruct/mapstruct-examples MapStrcut与其它工具对比以及使用说明! http://www.tuicool.com/articles/uiIRjai 是否一直在使用BeanUtils.copyProperties 用于对象属性拷贝. 出现种种小问题. 会将同名属性拷贝到另外一个对象中…
一.简单介绍 XStream是thoughtworks开发的开源框架,用于实现XML数据于Java对象.Json数据的转换.它不需要schema或其他的mapping文件就可以进行java对象和xml文件之间的转换,API调用起来非常方便,并且扩展功能强大. 1,XStream的特点 a)灵活易用:在更高的层次上提供了简单.灵活.易用的统一接口,用户无需了解项目的底层细节 b)无需映射:大多数对象都可以在无需映射的情况下进行序列化与反序列化的操作 c)高速稳定:设计时力求达到的最重要的指标是解析…
摘要 当前web后端开发,都是使用多层工程结构,需要在VO,BO,DTO,DO等各种数据结构中相互转换.这些转换代码都是些比较简单的字段映射,类型转换,重复性工作比较高,可以使用一些工具解放我们的双手 技术方案 实现类转换的方案很多,不同方案有优缺点,需要开发者自行取舍 方案 优点 缺点 手写代码 1. 灵活性高 2.方便后续重构 1. 重复性工作多 2. 手写代码容易遗漏掉有些字段 BeanUtils.copyProperties 使用反射实现 1. 使用简单 2. Apache 的包效率比较…
什么是Dozer Dozer是一个Java对象转换工具,可以在JavaBean和JavaBean之间进行递归数据复制,并且适应不同复杂的类型.Dozer会直接将名称相同的属性进行复制,属性名不同或者有特殊的要求则可以在xml中进行配置. 除了使用Dozer,当然你还由其他选择: 典型的解决方案就是手动拷贝,弊端很明显,代码中充斥大量Set 和Get方法,真正的业务被埋藏值与值的拷贝之中. 另一种方案就是使用BeanUtil,但BeanUtil不够很好的灵活性,有时候还不得不手动拷贝.Dozer可…
对象转换: 对象的分层涉及到各个层级之间的对象转换(Entity2DTO , DTO2VO, VO2DTO,DTO2Entity等),传统的采用set/get 方法硬编码实现写的代码比较多:或者采用Bean的copy处理性能受影响 新的处理方式:采用工具在可以在编译器动态生成Java实现类,同时可以集成spring的生态体系,纯粹的是面向接口实现方式 实现方式: 项目中需要添加依赖配置 <org.mapstruct.version>1.3.0.Final</org.mapstruct.v…
让人头疼的对象转换 头炸,po2vo.vo2do.do2dto,一堆对象属性,取出来塞进来.要不是为了 DDD 架构下的各个分层防腐,真想一竿子怼下去. 那上 BeanUtils.copyProperties 呀,其实对象转换不只这个方法,还有同类的12种手段,但综合来看还是 MapStruct 在编译期生成x.set(y.get)代码的最终效果最好,整体压测数据如下: BeanUtils.copyProperties 是大家代码里最常出现的工具类,但只要你不把它用错成 Apache 包下的,而…
在项目中,采用code first时建立的模型对象不能直接用于数据传输,需要从新根据需求建立Dto对象 为什么需要建立Dto对象呢? DTO即数据传输对象.之前不明白有些框架中为什么要专门定义DTO来绑定表现层中的数据,为什么不能直接用实体模型呢,有了DTO同时还要维护DTO与Model之间的映射关系,多麻烦. 然后看了这篇文章中的讨论部分才恍然大悟. 摘两个比较有意义的段落. 表现层与应用层之间是通过数据传输对象(DTO)进行交互的,数据传输对象是没有行为的POCO对象,它 的目的只是为了对领…