【Java项目】Mapstruct的使用以及使用过程中遇到的各种问题的解决

简介: 【Java项目】Mapstruct的使用以及使用过程中遇到的各种问题的解决

前言

mapstruct是一个进行VO,DO,DTO各类型对象之间相互转换的一个工具。

可以使用这个工具快速的在一些拥有公共属性的类之间进行属性的快速赋值。

并且使用mapstruct的效率远高于BeanUtil,众所周知BeanUtil是不被在开发中允许使用的。

其底层是在代码编译后,为项目动态的生成一些代码,如下

配置

<org.mapstruct.version>1.5.3.Final</org.mapstruct.version>
  <org.projectlombok.version>1.18.12</org.projectlombok.version>
 <!--        不是必备 只是为了懒,不用写get set方法
        必须放在mapstuct依赖的前面-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- mapStruct 对象转换 -->
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${org.mapstruct.version}</version>
        </dependency>
        <!-- idea 2018.1.1 之前的版本需要添加下面的配置,
        后期的版本就不需要了,可以注释掉,我自己用的2022.1 -->
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>${org.mapstruct.version}</version>
        </dependency>
  <build>
        <!--关于lombok和mapstruct的版本兼容问题多说几句,
        maven插件要使用3.6.0版本以上、lombok使用1.16.16版本以上,
        另外编译的lombok mapstruct的插件不要忘了加上
        否则会出现下面的错误:No property named "aaa" exists in source parameter(s).
         Did you mean "null"?
        这种异常就是lombok编译异常导致缺少get setter方法造成的。
        还有就是缺少构造函数也会抛异常。-->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${org.projectlombok.version}</version>
                        </path>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${org.mapstruct.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>

首先,我在注释里面已经写了,在pom文件中,要求lombok这个依赖的位置是在mapstruct上面的,否则会导致属性转换的时候,目标属性的各个属性都是null

项目使用

这里可以使用mapstruct提供的一些注解来帮助我们设定属性的对应关系。

比如,这是第一种情况,如果两个实体中 有几个字段命名不一致,可以使用@Mapping 解决

同时,我们也可以在集合之间完成属性的转换

同时,如果说目标对象的属性来源不止一个类,则可以使用如下方式

同时,还提供了如下方式来将mapstuct动态生成的实现类作为一个Bean来使用


相关文章
|
16天前
|
IDE 安全 Java
Lombok 在企业级 Java 项目中的隐性成本:便利背后的取舍之道
Lombok虽能简化Java代码,但其“魔法”特性易破坏封装、影响可维护性,隐藏调试难题,且与JPA等框架存在兼容风险。企业级项目应优先考虑IDE生成、Java Records或MapStruct等更透明、稳健的替代方案,平衡开发效率与系统长期稳定性。
109 1
|
18天前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
18天前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
202 1
|
2月前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
509 1
|
2月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
330 63
|
3月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
156 0
|
3月前
|
人工智能 安全 Java
掌握Java反射:在项目中高效应用反射机制
Java反射是一种强大功能,允许程序在运行时动态获取类信息、创建对象、调用方法和访问字段,提升程序灵活性。它在框架开发、动态代理、注解处理等场景中广泛应用,如Spring和Hibernate。但反射也存在性能开销、安全风险和代码复杂性,应谨慎使用。
|
3月前
|
安全 Java 测试技术
Java 大学期末实操项目在线图书管理系统开发实例及关键技术解析实操项目
本项目基于Spring Boot 3.0与Java 17,实现在线图书管理系统,涵盖CRUD操作、RESTful API、安全认证及单元测试,助力学生掌握现代Java开发核心技能。
111 1
|
3月前
|
缓存 Java 数据库
Java 项目分层架构实操指南及长尾关键词优化方案
本指南详解基于Spring Boot与Spring Cloud的Java微服务分层架构,以用户管理系统为例,涵盖技术选型、核心代码实现、服务治理及部署实践,助力掌握现代化Java企业级开发方案。
150 2