博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【迁移2018-04-12 10:46:11】BeanCopier之MapStruct(一)
阅读量:6839 次
发布时间:2019-06-26

本文共 3408 字,大约阅读时间需要 11 分钟。

  hot3.png

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

引入

org.mapstruct
mapstruct-jdk8
${org.mapstruct.version}
org.mapstruct
mapstruct-processor
${org.mapstruct.version}
provided

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

org.apache.maven.plugins
maven-compiler-plugin
3.6.2
${java.version}
${java.version}
${project.encoding}
org.projectlombok
lombok
${lombok.version}
org.mapstruct
mapstruct-processor
${org.mapstruct.version}
-Amapstruct.defaultComponentModel=spring

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

编译

忽略具体bean,copier如下

@Mapperpublic 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)")@Componentpublic class OrderFundsLiteMapperImpl implements OrderFundsLiteMapper {    @Override    public 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参考指南

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

你可能感兴趣的文章
maven参数
查看>>
predis连接redis sentinel的问题处理
查看>>
js写码良好习惯
查看>>
shmall参数设置不当引起数据库启动时报out of memory报错
查看>>
Linux查看性能的命令介绍
查看>>
Web模糊测试工具Powerfuzzer
查看>>
spring boot 新手错误
查看>>
Python-常用模块
查看>>
sudo详解
查看>>
Log4j学习汇总—–配置详解
查看>>
使用PHP开发你必须得注意的要点
查看>>
ssl ca
查看>>
shell 简单服务监控
查看>>
服务器检测硬件配置脚本14.9.15
查看>>
nmap远程端口探测
查看>>
巨头纷纷进驻物联网行业,围绕巨头布局细分领域,将成为独角兽成长的重要模式...
查看>>
nagios安装及配置
查看>>
Spring+CXF配置HTTP代理访问Internet
查看>>
Lync Server 2013企业版部署测试六:前端服务器安装Lync Server系统
查看>>
Error 和 Exception的区别
查看>>