当前位置: 首页 > news >正文

MapStruct介绍

一、MapStruct

1.1何为MapStruct

        要说这个东西,其实和我们刚刚讲到的Lombok相类似。其是由我们的源代码加上MapStruct经过编译后得到.class文件,文件中自动补全了代码。那么补全了什么代码?实现了什么功能?

        MapStruct的产生,我们还需要看看在这之前的一些情况。对于我们的不同JavaBean之间在项目开发时总会涉及到相互转化。PO、DTO、VO之间。

        方式一:BeanUtil.copyProperties:浅拷贝(相同引用、属性、名称限制、需要get、set方法、慢等)。

        方式二:纯纯get、set、也可以builder,慢,冗余。

        MapSturct 是一个生成类型安全, 高性能且无依赖的 JavaBean 映射代码的注解处理器(annotation processor)。  

1.2添加MapStruct

        导入依赖:

<dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId><version>1.6.0.Beta1</version>
</dependency>

        而在我使用的过程中发现,Lombok和MapStruct会发生版本冲突。解决:在pom.xml中配置。

<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><configuration><annotationProcessorPaths><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>1.6.0.Beta1</version></path><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></path><path><groupId>org.projectlombok</groupId><artifactId>lombok-mapstruct-binding</artifactId><version>0.2.0</version></path></annotationProcessorPaths></configuration></plugin>
<plugins>

        如此,我们就可以同时使用Lombok和MapStruct。

1.3使用MapStruct

1.3.1简单拷贝(dto2vo、vo2dto)

        步骤一:创建Mapper接口,加上@Mapper注解(注意是MapStruct包下的注解)

        步骤二:书写转换方法。

        步骤三:实践。

1.3.2交给IoC、创建单例

        

1.3.3不同字段之间的映射

        @Mappings和@Mapping注解

1.3.4多对象转一个对象

  • 当多个对象中, 有其中一个为 null, 则会直接返回 null
  • 如一对一转换一样, 属性通过名字来自动匹配。 因此, 名称和类型相同的不需要进行特殊处理
  • 当多个原对象中,有相同名字的属性时,需要通过 @Mapping 注解来具体的指定, 以免出现歧义(不指定会报错)。

1.3.5一个对象转多个对象

1.3.6编译器支持

http://www.lryc.cn/news/437036.html

相关文章:

  • 35天学习小结
  • 【iOS】UIViewController的生命周期
  • ELK在Linux服务器下使用docker快速部署(超详细)
  • unity导入半透明webm + AE合成半透明视频
  • 力扣: 四数相加II
  • 径向基函数神经网络RBFNN案例实操
  • Java-数据结构-二叉树-习题(一) (✪ω✪)
  • js 时间戳转日期格式
  • 基于人工智能的自动驾驶系统项目教学指南
  • [Linux#49][UDP] 2w字详解 | socketaddr | 常用API | 实操:实现简易Udp传输
  • 期权组合策略有什么风险?期权组合策略是什么?
  • 从Zotero6到Zotero7的数据迁移尝试?(有错勿喷,多多指教!)
  • 快速排序(分治思想)
  • JAVA相关知识
  • 详解TCP的三次握手
  • Java面试篇基础部分-Java创建线程详解
  • Ubuntu 20.04/22.04无法连接网络(网络图标丢失、找不到网卡)的解决方案
  • 《MDTv2- Masked Diffusion Transformer is a Strong Image Synthesizer》
  • 算法 - 二分查找
  • Python知识点:如何使用Python进行图像批处理
  • 数据结构实验1
  • 使用Postman+JMeter进行简单的接口测试
  • 基于 SpringBoot 的车辆充电桩管理系统
  • centos7.9安装clamav教程
  • 产品经理如何转型为AI产品经理,如何理解AI产品工程化
  • TiDB从0到1学习笔记(精华篇)
  • NLP-新词挖掘
  • 电脑录屏不求人,9月必备免费录屏软件推荐!苹果电脑可用!
  • SpringMVC基于注解使用:国际化
  • 工地安全帽检测系统源码分享