当前位置: 代码网 > it编程>编程语言>Java > spring中Mapstruct属性映射的实现

spring中Mapstruct属性映射的实现

2024年12月07日 Java 我要评论
整合 mapstruct : 简化属性映射解决问题:当一个对象属性过多时,do转vo需要写的字段太多了1. 什么是 mapstruct?mapstruct 是一个用于简化 java bean 映射代码

整合 mapstruct : 简化属性映射

解决问题:当一个对象属性过多时,do转vo需要写的字段太多了

1. 什么是 mapstruct?

mapstruct 是一个用于简化 java bean 映射代码的代码生成器。它可以自动生成在不同 java 对象之间进行映射的代码,而无需手动编写复杂的转换逻辑。mapstruct 使得在 java 应用程序中进行对象映射变得更加简单、高效、可维护。

2. 为什么要使用 mapstruct?

  • 简化映射过程: 传统的 java 对象映射需要编写大量的重复、繁琐的代码。mapstruct 自动生成这些映射代码,节省了开发人员的时间和精力。
  • 类型安全性: mapstruct 是基于编译时的代码生成,因此提供了类型安全性。在编译时,它会检查源对象和目标对象的类型,避免了运行时的类型错误。
  • 高性能: 由于 mapstruct 生成的代码是高度优化的,所以性能非常好。相比手动编写的映射代码,mapstruct 生成的代码更加高效。
  • 可维护性: 当数据模型发生变化时,手动更新映射代码可能会非常麻烦。mapstruct 能够根据最新的数据模型自动生成新的映射代码,确保映射逻辑与数据模型保持同步。
  • 灵活性: mapstruct 提供了丰富的配置选项和扩展点,可以满足各种复杂映射场景的需求。你可以定制生成的代码,以适应特定的业务逻辑。

3. 添加依赖

多模块中,在父工程模块的pom.xm下

    <!-- 版本号统一管理 -->
    <properties>
        // 省略...
        <mapstruct.version>1.5.5.final</mapstruct.version>
    </properties>
    
    <!-- 统一依赖管理 -->
    <dependencymanagement>
        <dependencies>
			// 省略...

            <!-- mapstruct 属性映射 -->
            <dependency>
                <groupid>org.mapstruct</groupid>
                <artifactid>mapstruct</artifactid>
                <version>${mapstruct.version}</version>
            </dependency>

        </dependencies>
    </dependencymanagement>
    
       <build>
        <!-- 统一插件管理 -->
        <pluginmanagement>
            <plugins>
				// 省略...

                <plugin>
                    <groupid>org.apache.maven.plugins</groupid>
                    <artifactid>maven-compiler-plugin</artifactid>
                    <configuration>
                        <source>${java.version}</source> <!-- 根据你的 jdk 版本进行调整 -->
                        <target>${java.version}</target> <!-- 根据你的 jdk 版本进行调整 -->
                        <annotationprocessorpaths>
                            <path>
                                <groupid>org.projectlombok</groupid>
                                <artifactid>lombok</artifactid>
                                <version>${lombok.version}</version>
                            </path>
                            <path>
                                <groupid>org.mapstruct</groupid>
                                <artifactid>mapstruct-processor</artifactid>
                                <version>${mapstruct.version}</version> <!-- 使用时请检查最新版本 -->
                            </path>
                        </annotationprocessorpaths>
                    </configuration>
                </plugin>
            </plugins>
        </pluginmanagement>
    </build>

在需要使用的模块中添加

		<dependency>
			<groupid>org.mapstruct</groupid>
			<artifactid>mapstruct</artifactid>
		</dependency>

在入口模块添加编译插件:

    <build>
        <plugins>
			// 省略...
            <plugin>
                <groupid>org.apache.maven.plugins</groupid>
                <artifactid>maven-compiler-plugin</artifactid>
            </plugin>
        </plugins>
    </build>

4. idea 配置 mapstruct

添加好了 mapstruct 依赖后,已经可以确保项目中能够正常使用 mapstruct 了。但是,为了在开发过程中获得更好的体验,我们可以为 ide 进行一些配置,从而支持 mapstruct 的自动代码生成、代码提示等功能。

4.1 启用注解处理器

  • 打开 intellij idea,并加载你的项目。
  • 打开 file -> settings (或 preferences)
  • 在左侧导航栏中选择 build, execution, deployment -> compiler -> annotation processors
  • 勾选 enable annotation processing
  • 在 store generated sources relative to 下拉列表中选择 module content root
  • 点击右下角 apply 按钮应用设置,然后,点击 ok 按钮关闭弹框。

在这里插入图片描述

4.2添加mapstruct插件

虽然这不是必需的,但 mapstruct 插件可以为你提供一些很有用的功能,例如代码提示和自动补全。

  • 打开 file -> settings (或 preferences)
  • 在左侧选择 plugins
  • 在市场 (marketplace) 中搜索 “mapstruct” 并安装它。
  • 重启 intellij idea。

5. 添加 convert 接口

新建一个 /convert 包,并创建一个 blogsettingsconvert 转换接口,代码如下:

@mapper
public interface blogsettingsconvert {
    /**
     * 初始化 convert 实例
     */
    blogsettingsconvert instance = mappers.getmapper(blogsettingsconvert.class);

    /**
     * 将 vo 转化为 do
     * @param bean
     * @return
     */
    blogsettingsdo convertvo2do(updateblogsettingsreqvo bean);

}

注意,接口类上添加的 @mapper 注解,导入自 org.mapstruct.mapper, 别搞错了哦。

6. 使用 mapstruct 来转换

@service
public class adminblogsettingsserviceimpl extends serviceimpl<blogsettingsmapper, blogsettingsdo> implements adminblogsettingsservice {

    @override
    public response updateblogsettings(updateblogsettingsreqvo updateblogsettingsreqvo) {
        // vo 转 do
        blogsettingsdo blogsettingsdo = blogsettingsconvert.instance.convertvo2do(updateblogsettingsreqvo);
        blogsettingsdo.setid(1l);

        // 保存或更新(当数据库中存在 id 为 1 的记录时,则执行更新操作,否则执行插入操作)
        saveorupdate(blogsettingsdo);
        return response.success();
    }
}
ingsdo.setid(1l);

        // 保存或更新(当数据库中存在 id 为 1 的记录时,则执行更新操作,否则执行插入操作)
        saveorupdate(blogsettingsdo);
        return response.success();
    }
}

将 vo 类转换为了 do 类,仅需要对 vo 中没有值的字段,如 id 字段设置一下值即可

到此这篇关于spring中mapstruct属性映射的实现的文章就介绍到这了,更多相关spring mapstruct属性映射内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com