mapstruct解放Java对象转换
source link: http://mp.weixin.qq.com/s?__biz=MzI4NjI3MDc1NA%3D%3D&%3Bmid=2247484065&%3Bidx=1&%3Bsn=c99fea8432888624978b2fc6e5e188c3
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
摘要
当前web后端开发,都是使用多层工程结构,需要在VO,BO,DTO,DO等各种数据结构中相互转换。这些转换代码都是些比较简单的字段映射,类型转换,重复性工作比较高,可以使用一些工具解放我们的双手
技术方案
实现类转换的方案很多,不同方案有优缺点,需要开发者自行取舍
方案 优点 缺点 手写代码 1. 灵活性高 2.方便后续重构 1. 重复性工作多 2. 手写代码容易遗漏掉有些字段 BeanUtils.copyProperties 使用反射实现 1. 使用简单 2. Apache 的包效率比较低,spring的包效率可以接受 1. 复杂场景支持不足,控制copy粒度太粗 2. 不易重构 mapstruct 1. 灵活性高支持简单,复杂,嵌套,自定义扩展等多种手段 2. 编译期生成,没有效率问题 不方便后续重构方便后续重构方便后续重构的意思是当你需要更改DTO字段时,可以利用编译器的引用关系直接refactor掉
综上考虑mapstruct方案优于beanutils.copy,和手写方案对比,有一定劣势,需要取舍。个人意见,对于改字段重构,这种应该通过测试用例去保证,而不是依赖编辑器的功能。此外使用mapstruct进行转换后,类引用关系还在,重构可以通过识别类的粒度,来保证不出错。如果再考虑到手工党的出错概率,和开发效率mapstruct显然更优。
实现
-
引入依赖包
-
为maven compile plugin 设置annotation processor
-
IDEA 安装一个mapstruct 插件 有了这个插件后,可以找到映射类的属性,一些拼写校验
常用用法
默认情况下,当属性值与目标实体的名称相同时,就会隐式映射
其他通用转换
属性值不相同时
Collection对象转换
JAVA 构造器
通过expression 来调用Java代表
qualifiedByName
如果构造器满足不了,还可以自定义方法,然后再调用
接口默认实现
mapstruct是用户定义接口,然后自动生成实现类,如果转换类中有非常定制的转换,不想通过mapstruct来转换,我们可以直接使用接口默认实现
当然还有其他功能可以使用,比如Decorator,这里不再一一列举,更多丰富的功能可以查看mapstruct 细节使用
参考
https://blog.csdn.net/w605283073/article/details/107371462
mapstruct 细节使用
Recommend
-
98
MapStruct is a pretty popular and well-maintained framework for object mapping. To summarize: it is capable of generating the mapping code among objects in different layers of an application.
-
25
本文介绍下Java对象属性复制组件(MapStruct),以及项目中引入遇到的坑。 1. 问题背景 日常编程中,经常会碰到对象属性复制的场景,就比如下面这样一个常见的三层MVC架构。
-
9
mapstruct 高级用法之userid转换为username November 30, 2020 6027 mapstruct的简单用法就不讲了,看完这篇文章能获得什么呢? 1.普通用法:将userId转换为userName?
-
9
对象转换工具 MapStruct 介绍 发表于 2021-08-08 | 分类于 Java , MapStr...
-
5
还在用BeanUtils拷贝对象?MapStruct才是王者!【附源码】 - 阿Q说代码的个人空间 - OSCHINA - 中文开源技术交流社区 前几天,远在北京的小伙伴在群里抛出了“MapStruct”的概念。对于只闻其名,未见其人的我来说,决定对其研究一番。本文我...
-
10
V2EX › Java 最近遇到个天坑, mapstruct 还不支持 Java 16 里的 record yuchen01 · 4...
-
3
解放双手,自动生成“x.set(y.get)”,搞定vo2dto转换 作者:小傅哥博客:
-
3
EntityUtils MapStruct BeanCopier 数据实体类转换工具 DO BO VO DTO 附视频 精选 原创 赛先生和泰先生
-
6
大家在开发中,最让人头疼的就是:对象之间的拷贝,前端的VO和数据库的Entity不一致! 性能最好的就是手动set,主要是枯燥且无技术含量,不仅耗费大量时间而且很容易出错; 所以我们要成为优秀的程序员,要多借助轮子,开发效率事半功倍...
-
4
Comparing ModelMapper and MapStruct in Java: The Power of Automatic Mappers ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK