【迁移2018-04-12 10:46:11】BeanCopier之MapStruct(一)
为什么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(一)相关推荐
- 如何安装透明窗口主题Emerald在Ubuntu 13.04/12.10/12.04中-PPA
Emerald 窗口装饰可能已经停止发展,在Ubuntu软件库也只提供几个版本的包,但也有用户想继续使用,所以以使其更易于安装,国外webupd8博客上传了Emerald到主WebUpd8 PPA,可 ...
- 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 ...
- Ubuntu 14.04 / 13.10 / 13.04 / 12.04使用PPA安装NVIDIA GeForce显卡驱动
最近,在一台比较老的PC上装了ubuntu 14.04,安装过程中时不时花屏,开机输入密码后直接花屏卡死,最后google确认是ubuntu的开源驱动,对较老的NVIDIA显卡驱动有问题.so,看到一 ...
- Java9、10、11、12、13、14、15、16、17个版本新特性
Java9新特性 1 模块化系统 模块(module)的概念,其实就是package外再裹一层,也就是说,用模块来管理各个package,通过声明某个package暴露,不声明默认就是隐藏.因此,模块 ...
- 4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例
4.10/4.11/4.12 lvm讲解 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化.挂载-->扩容. 磁盘分区 注: 创建分区时 ...
- 12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期时间
- 12.10 Nginx访问日志 - 12.11 Nginx日志切割 - 12.12 静态文件不记录日志和过期时间# 12.10 Nginx访问日志 - 日志的格式- vim /usr/local/ ...
- Ubuntu 13.10/12.10/12.04 用户如何升级到 Ubuntu 14.04
Ubuntu 14.04 就要发布了,可能很多人要问,不是已经17号了吗?怎么还没有发布呢?要有一点地理常识,我们使用的是东8区的北京时间,按照美国纽约时间,我们要早12个小时呢?所以大家再耐心等等. ...
- Ubuntu 14.04/14.10下安装VMware Workstation 11图文教程
VMware workstation 是一个可以进行桌面操作的虚拟软件.它可以让我们在一台电脑或者虚拟机中运行多个虚拟机. 由VMware公司研发和维护.由于是商业软件,我们需要买他们家的许可证或者说 ...
- 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 ...
最新文章
- 5.html基础标签:块级+行级元素+特殊字符+嵌套规则
- mvn 打包项目到eclipse
- 自定义分页(模块化)
- Linux的sort命令用法
- Linux运维:现状、入门和未来之路
- python中else和if的结合语句_python中else和if的结合语句_python中的if-else语句和字典...
- eduline php5.3,index.php
- linux下cmake使用教程,超详细的cmake教程
- matlab入门——矩阵运算
- Eclipse阿里云镜像源配置
- Android 编写测试用例
- 当年,学姐把这份Java总结给我,让我在22k的校招王者局乱杀
- 公有云NAT 网关比较
- 软件开发合同纠纷的律师随笔
- HDU 1873 优先队列 Java版
- CodeForces 858C Did you mean... 、 CodeForces 858D Polycarp's phone book!黑科技
- 经典算法之直接插入排序法
- 学习笔记 查分约束系统
- 闲鱼客服工具/消息管理系统:可以让客服放下手机,在电脑上管理闲鱼店铺的咨询信息
- 论文笔记:ICLR 2021 Combining Lable Propagation And Simple Models Out-Performs Graph Neural Network