为什么80%的码农都做不了架构师?>>>   

无意中见同事在比较BeanCopier的效率,MapStruct的使用者很牛皮的说我的效率是你的XX倍,今天认识了一下MapStrut,毫无疑问反射的效率绝对输给setter/getter

引入

            <!-- OR use this with Java 8 and beyond: <artifactId>mapstruct-jdk8</artifactId> --><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-jdk8</artifactId><version>${org.mapstruct.version}</version></dependency><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${org.mapstruct.version}</version><scope>provided</scope></dependency>

maven编译更新成1.8结合lombok,同时更新maven-compiler-plugin

                <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.6.2</version><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.encoding}</encoding><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></path><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${org.mapstruct.version}</version></path></annotationProcessorPaths><compilerArgs><compilerArg>-Amapstruct.defaultComponentModel=spring</compilerArg></compilerArgs></configuration></plugin>

-Amapstruct.defaultComponentModel=spring编译配置的目的是指定mapstruct编译生成实现类的时候支持spring的扫描

编译

忽略具体bean,copier如下

@Mapper
public interface OrderFundsLiteMapper {WjsOrderFundsLiteToValidBean toWjsOrderFundsLiteToValidBean(OrderFundsLiteDO orderFundsLiteDO);}

maven编译,实现类如下

@Generated(value = "org.mapstruct.ap.MappingProcessor",date = "2018-04-12T10:58:53+0800",comments = "version: 1.2.0.Final, compiler: javac, environment: Java 1.8.0_111 (Oracle Corporation)"
)
@Component
public class OrderFundsLiteMapperImpl implements OrderFundsLiteMapper {@Overridepublic WjsOrderFundsLiteToValidBean toWjsOrderFundsLiteToValidBean(OrderFundsLiteDO orderFundsLiteDO) {if ( orderFundsLiteDO == null ) {return null;}WjsOrderFundsLiteToValidBean wjsOrderFundsLiteToValidBean = new WjsOrderFundsLiteToValidBean();wjsOrderFundsLiteToValidBean.setOrderFundsId( orderFundsLiteDO.getOrderFundsId() );wjsOrderFundsLiteToValidBean.setAgencyCode( orderFundsLiteDO.getAgencyCode() );wjsOrderFundsLiteToValidBean.setOrderFundsAmt( orderFundsLiteDO.getOrderFundsAmt() );wjsOrderFundsLiteToValidBean.setGmtContractUpdate( orderFundsLiteDO.getGmtContractUpdate() );return wjsOrderFundsLiteToValidBean;}
}

可见MapStruct在编译期生成实现类,同时作为spring的@Component,可以直接注入使用。

运行

WjsOrderFundsLiteToValidBean(orderFundsId=1, agencyCode=twen, orderFundsAmt=1, gmtContractUpdate=Thu Apr 12 11:05:13 CST 2018)

总结

MapStruct在编译时,自动生成具体的setter/getter,减少了代码量,同时避免反射带来的效率牺牲。

具体学习文档 参见 MapStruct 1.2.0.Final参考指南 http://mapstruct.org/documentation/stable/reference/html/

转载于:https://my.oschina.net/twen/blog/1925471

【迁移2018-04-12 10:46:11】BeanCopier之MapStruct(一)相关推荐

  1. 如何安装透明窗口主题Emerald在Ubuntu 13.04/12.10/12.04中-PPA

    Emerald 窗口装饰可能已经停止发展,在Ubuntu软件库也只提供几个版本的包,但也有用户想继续使用,所以以使其更易于安装,国外webupd8博客上传了Emerald到主WebUpd8 PPA,可 ...

  2. VS2019++QT5.12.10+PCL1.11.1+VTK8.2.0+opencv(camke3.18.0)环境搭配及演示实例

    一.参考链接: 1.VS2019+QT5.12.10+PCL1.11.1+VTK8.2.0(cmake3.20.4)环境搭配_寒木休思的博客-CSDN博客 2.VS2019+PCL1.11.1+VTK ...

  3. Ubuntu 14.04 / 13.10 / 13.04 / 12.04使用PPA安装NVIDIA GeForce显卡驱动

    最近,在一台比较老的PC上装了ubuntu 14.04,安装过程中时不时花屏,开机输入密码后直接花屏卡死,最后google确认是ubuntu的开源驱动,对较老的NVIDIA显卡驱动有问题.so,看到一 ...

  4. Java9、10、11、12、13、14、15、16、17个版本新特性

    Java9新特性 1 模块化系统 模块(module)的概念,其实就是package外再裹一层,也就是说,用模块来管理各个package,通过声明某个package暴露,不声明默认就是隐藏.因此,模块 ...

  5. 4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

    4.10/4.11/4.12 lvm讲解 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化.挂载-->扩容. 磁盘分区 注: 创建分区时 ...

  6. 12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期时间

    - 12.10 Nginx访问日志 - 12.11 Nginx日志切割 - 12.12 静态文件不记录日志和过期时间# 12.10 Nginx访问日志 - 日志的格式- vim /usr/local/ ...

  7. Ubuntu 13.10/12.10/12.04 用户如何升级到 Ubuntu 14.04

    Ubuntu 14.04 就要发布了,可能很多人要问,不是已经17号了吗?怎么还没有发布呢?要有一点地理常识,我们使用的是东8区的北京时间,按照美国纽约时间,我们要早12个小时呢?所以大家再耐心等等. ...

  8. Ubuntu 14.04/14.10下安装VMware Workstation 11图文教程

    VMware workstation 是一个可以进行桌面操作的虚拟软件.它可以让我们在一台电脑或者虚拟机中运行多个虚拟机. 由VMware公司研发和维护.由于是商业软件,我们需要买他们家的许可证或者说 ...

  9. Ubuntu LTS 系统学习使用体会和实用工具软件汇总 6.04 8.04 10.04 12.04 14.04 16.04

    Ubuntu LTS 系统学习体会和工具软件汇总 6.04 8.04 10.04 12.04 14.04 16.04 ubuntu入门必备pdf:http://download.csdn.net/de ...

最新文章

  1. 5.html基础标签:块级+行级元素+特殊字符+嵌套规则
  2. mvn 打包项目到eclipse
  3. 自定义分页(模块化)
  4. Linux的sort命令用法
  5. Linux运维:现状、入门和未来之路
  6. python中else和if的结合语句_python中else和if的结合语句_python中的if-else语句和字典...
  7. eduline php5.3,index.php
  8. linux下cmake使用教程,超详细的cmake教程
  9. matlab入门——矩阵运算
  10. Eclipse阿里云镜像源配置
  11. Android 编写测试用例
  12. 当年,学姐把这份Java总结给我,让我在22k的校招王者局乱杀
  13. 公有云NAT 网关比较
  14. 软件开发合同纠纷的律师随笔
  15. HDU 1873 优先队列 Java版
  16. CodeForces 858C Did you mean... 、 CodeForces 858D Polycarp's phone book!黑科技
  17. 经典算法之直接插入排序法
  18. 学习笔记 查分约束系统
  19. 闲鱼客服工具/消息管理系统:可以让客服放下手机,在电脑上管理闲鱼店铺的咨询信息
  20. 论文笔记:ICLR 2021 Combining Lable Propagation And Simple Models Out-Performs Graph Neural Network

热门文章

  1. C# WINFORM 打包数据库
  2. mockcpp的so加载失败问题
  3. HDFS文件详情查看案例
  4. 线性表的链式表示——双链表
  5. Matlab中计算程序运行时间的三种方法
  6. react+webpack 引入字体图标
  7. 汉字转拼音,中文拼音排序器
  8. 事件源event.target
  9. java 语言实现的随机数生成算法
  10. Android系统Surface机制的SurfaceFlinger服务的线程模型分析