Mapstruct的具体介绍与使用

这篇具有很好参考价值的文章主要介绍了Mapstruct的具体介绍与使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华。 如果小伙伴们觉得我的文章不错,记得一键三连哦
mapstruct,各大实战问题分析,开发工具,java

一、mapstruct简介

  • mapstruct是一种 实体类 映射框架,能够通过Java注解将一个实体类的属性安全地赋值给另一个实体类。有了mapstruct,只需要定义一个映射器接口,声明需要映射的方法,在编译过程中,mapstruct会自动生成该接口的实现类,实现将源对象映射到目标对象的效果。

二、mapstruct与其他映射对比

  • 实体类映射框架大致有两种:一种是运行期通过java反射机制动态映射;另一种是编译期动态生成getter/setter,在运行期直接调用框架编译好的class类实现实体映射。
  • 由于mapstruct映射是在编译期间实现的,因此相比运行期的映射框架有以下几个优点:
  1. 安全性高。因为是编译期就实现源对象到目标对象的映射, 如果编译器能够通过,运行期就不会报错。
  2. 速度快。速度快指的是运行期间直接调用实现类的方法,不会在运行期间使用反射进行转化。

三、mapstruct底层原理解析

  • mapstruct是基于JSR 269实现的,JSR 269是JDK引进的一种规范。有了它,能够实现在编译期处理注解,并且读取、修改和添加抽象语法树中的内容。JSR 269使用Annotation Processor在编译期间处理注解,Annotation Processor相当于编译器的一种插件,因此又称为插入式注解处理。想要实现JSR 269,主要有以下几个步骤:
  1. 继承AbstractProcessor类,并且重写process方法,在process方法中实现自己的注解处理逻辑。
  2. 在META-INF/services目录下创建javax.annotation.processing.Processor文件注册自己实现的Annotation Processor

1、Java动态编译

Java程序编译一般经历以下流程:

mapstruct,各大实战问题分析,开发工具,java

上图中Java源码到class文件的过程其实是一个比较复杂的过程。其中的经过可以用下图描述:

mapstruct,各大实战问题分析,开发工具,java

上图的流程可以概括为下面几个步骤:

  1. 生成抽象语法树。Java编译器对Java源码进行编译,生成抽象语法树(Abstract Syntax Tree,AST)。
  2. 调用实现了JSR 269 API的程序。只要程序实现了JSR 269 API,就会在编译期间调用实现的注解处理器。
  3. 修改抽象语法树。在实现JSR 269 API的程序中,可以修改抽象语法树,插入自己的实现逻辑。
  4. 生成字节码。修改完抽象语法树后,Java编译器会生成修改后的抽象语法树对应的字节码文件件。

四、具体使用

1、依赖导入

  • 首先需要把依赖包导入,主要由两个包组成:
    • org.mapstruct:mapstruct:
      • 包含了一些必要的注解,例如 @Mapping。r若我们使用的 JDK 版本高于1.8,当我们在pom里面导入依赖时候,建议使用坐标是:org.mapstruct:mapstruct-jdk8,这可以帮助我们利用一些 Java8 的新特性。
    • org.mapstruct:mapstruct-processor:
      • 注解处理器,根据注解自动生成 mapper 的实现。
<properties>
        <!-- 版本依赖 -->
        <mapstruct.version>1.4.2.Final</mapstruct.version>
</properties>


<dependencies>
 <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${mapstruct.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>${mapstruct.version}</version>
        </dependency>
</dependencies>

2、定义一个用例映射的接口

  • 在实体类下面创建即可,方便查找
    mapstruct,各大实战问题分析,开发工具,java

场景一:

  • 如果返回的参数属性名称与映射不同,那么我们就要映射成原有的
    mapstruct,各大实战问题分析,开发工具,java
    mapstruct,各大实战问题分析,开发工具,java

场景二:

  • 可以使用表达式来获取自己想要的信息
  • 比如:这里我们想要获取工具类的某个方法,那么就可以使用这种表达式
    mapstruct,各大实战问题分析,开发工具,java

mapstruct,各大实战问题分析,开发工具,java文章来源地址https://www.toymoban.com/news/detail-604599.html

场景三:

  • ignore: 表示忽略映射当前字段
    mapstruct,各大实战问题分析,开发工具,java

参考文章:

  • https://juejin.cn/post/6956190395319451679
  • https://www.cnblogs.com/mmzs/p/12735212.html

到了这里,关于Mapstruct的具体介绍与使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在 Spring Boot 应用程序中将 MapStruct 与 Lombok 结合使用的方法

    在本文中,您将找到有关如何高效使用 MapStruct、Lombok 和 Spring Boot 的代码示例和说明。         当您实现任何规模的服务时,您通常需要将数据从一种结构移动到另一种结构。通常,这是在不同逻辑层使用的相同数据 - 在业务逻辑、数据库级别或用于传输到前端应用程序

    2024年02月14日
    浏览(40)
  • 【MapStruct】对象转换

    MapSturct 是一个生成类型安全,高性能且无依赖的 JavaBean 映射代码的注解处理器(annotation processor)。 (1)注解处理器 (2)可以生成 JavaBean 之间那的映射代码 (3)类型安全,高性能,无依赖性 底层通过自动取值赋值操作完成 这是相对反射来说的,反射需要去读取字节码的

    2024年02月09日
    浏览(44)
  • MapStruct原理解析

    JSR-269、编译原理、生成树AST、SPI机制、FreeMarker 要想搞懂mapstruct的底层实现原理,需要先知道java编译流程:.java源文件经过编译器编译成为.class文件,虚拟机执行的就是.class文件 抽象语法树(Abstract Syntax Tree,AST)是在编译器的编译过程中生成的一种数据结构,用于表

    2024年02月05日
    浏览(36)
  • Eclipse集成MapStruct

    今天拿到同事其他项目的源码,导入并运行的时候抛出了异常,根据异常定位到 Mappers.getMapper ()获取不到值,后面查了一下发现是Eclipse需要自己手动集成MapStruct插件支持才行,同事用的IDEA已经默认支持了MapStruct,所以没这个问题。想换IDEA的心越来越强烈了。。。。 (这个其

    2024年02月12日
    浏览(43)
  • MapStruct的一些常规用法

    每天坚持写一篇原创文章。 使用过MapStruct之后,再也没用过BeanCopy来复制对象了。确实是非常好用的工具库。 MapStruct是一个代码生成器,简化了不同的Java Bean之间映射的处理,所以映射指的就是从一个实体变化成一个实体。例如我们在实际开发中,DAO层的实体和一些数据传输

    2024年03月09日
    浏览(44)
  • 告别BeanUtils,Mapstruct从入门到精通

    如果你现在还在使用BeanUtils,看了本文,也会像我一样,从此改用Mapstruct。 对象之间的属性拷贝,之前用的是Spring的BeanUtils,有一次,在学习领域驱动设计的时候,看了一位大佬的文章,他在文章中提到使用Mapstruct做DO和Entity的相互转换,出于好奇,后来就去了解了一下Map

    2024年02月10日
    浏览(31)
  • Java中使用MapStruct实现对象转换时使用@Mapping的expression表达式实现自定义转换规则(多对一、获取当前Date)

    Java中使用MapStruct实现对象转换/实体属性赋值/Bean属性映射,避免大量setter和getter: Java中使用MapStruct实现对象转换/实体属性赋值/Bean属性映射,避免大量setter和getter_霸道流氓气质的博客-CSDN博客 上面介绍了mapstruct的简单使用,某些场景下需要自定义转换规则,比如记录时间字

    2024年02月14日
    浏览(44)
  • 【已解决】MapStruct - Couldn‘t retrieve @Mapper annotation

    MapStruct - Couldn‘t retrieve @Mapper annotation 换成 1.3.1.Final 版本,发现生成的实现类没有对字段进行映射: 又降到 1.2.0.Final,这时生成的 impl 类有映射值了。

    2024年01月19日
    浏览(29)
  • Redis:redis基于各大实战场景下的基本使用

    适用人群:熟悉redis的指令,但不了解使用场景的人群 本文会详细描述各个场景的伪代码和对应的redis指令,至于为什么只是伪代码是因为每个语言操作redis的方式不一致,但是思想是一致的,只需要根据这个思想去找对应的api即可。 String的命令主要是有三大运用场景:分别

    2024年02月11日
    浏览(44)
  • 使用SpringBoot一小时快速搭建一个简单后台管理(增删改查)(超详细教程) 各大技术基础教学、实战项目开发教学

     最近也是临近期末了,各种的期末大作业,后台管理也是很多地方需要用到的,为了方便大家能快速上手,快速搭建一个简单的后台管理,我花了两天时间整理了一下 我会从0开始介绍,从数据库的设计到前端页面的引入最后到后端代码的编写,你只需要会一点前端的基础和

    2023年04月13日
    浏览(90)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包