如何使用MapStruct优雅的告别get,set

news2024/12/23 14:43:09

我们开发过程中会遇到很多bean拷贝的过程,最简单粗暴得方法就是set/get方法,当然这也是最臃肿的方法,代码显得过于冗长和笨重,其次还有框架BeanUtils在使用反射的时候都会影响到性能。虽然我们可以进行反射信息的缓存来提高性能。但是像这种的话,需要类型和名称都一样才会进行映射,有很多时候,由于不同的团队之间使用的名词不一样,还是需要很多的手动 set/get 等功能,而怎么才能又安全又优雅?

MapStruct注释处理器
MapStruct是一个Java注释处理器,用于生成类型安全的bean映射类。
Mapstruct 与过去常用的beanUtil转换有高性能的转换优势,编译期自动生成的mapper实现类能够更加优雅的来实现各种隐式类型转换,以实现快速而又敏捷的开发,告别臃肿的手动get、set

优点:
1,通过使用普通方法调用get,set 而不是反射来快速执行
2,变异时类型安全性:只能映射相互映射的对象和属性,不能将order实体以外映射到customer DTO 等
3,如果有映射不完整时(映射不完整或找不到正确的映射方法或类型转换异常),编译会抛出异常
4,可以通过freemarker定制化开发

工作组件:
org.mapstruct:mapstruct: 包含必需的注释 例如:@Mapping
org。mapstruct:mapstruct-processor:包含注释处理器,该注释处理器生成映射器实现

如何使用?
1,首先引入pom(版本最好在1.16.16以上)通常是和lombok一起使用

<properties>
    <mapstruct.version>1.2.0.Final</mapstruct.version>
</properties>
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-jdk8</artifactId>
    <version>${mapstruct.version}</version>
</dependency>
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>${mapstruct.version}</version>
</dependency>

2,安装idea中的mapstruct support 插件 安装并重启idea(不是必须项,个人感觉好用)
在这里插入图片描述
3,定义一个映射器
在所需的映射方法定义一个接口 并用@Mapper注释(在生成的实现中,源类型的所有可读属性都将复制到目标类型的相对应的属性中),如果目标实体中的名称不相同,可以通过@Mapping注释指定其名称进行对应,如果某个字段不想映射可以使用@Mapping(ignore = true) 排除该字段,另外target是必须添加的,source可以不添加(如果不添加则直接使用默认defaultValue)
在这里插入图片描述

另:还有其他的功能 比如组合映射,使用表达式映射,使用其他的值,嵌套映射,逆映射,继承与共享配置,还可使用自定义类型转换方法等等可以自行查看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全实用篇—iptables防火墙学习总结

iptables防火墙学习总结 目录 iptables简介&#xff1a; iptables题目练习&#xff1a; 题目包含&#xff08;市赛、省赛、国赛&#xff09;覆盖所有比赛面&#xff01; iptables简介&#xff1a; Iptables是Linux系统中的一个防火墙工具&#xff0c;它可以对进出本机的…

用Photoshop软件制作法线图以及查看效果细节

这里是在windows系统下用PS2020做演示。 第一步、在Photoshop软件中打开一张图(最好是正方形&#xff0c;边长是2的n次方大小的像素&#xff0c;例如宽和高都是512像素)&#xff0c;如下图所示&#xff1a; 第二步、在菜单栏选择滤镜然后再选择3D接着再选择生成法线图&#xf…

【漏洞复现】DedeCMS存在文件包含漏洞导致后台getshell(CVE-2023-2928)

复现环境下载 https://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7.106-UTF8.zip 影响版本 DedeCMS V5.7.106 CNVD编号&#xff1a;CNVD-2023-40504 漏洞分析 漏洞文件: uploads/dede/article_allowurl_edit.php存在缺少对该文件中写入内容的任何过滤是导致该漏洞的…

程序员的新型开发工具——低代码平台

低代码的热潮至今未消停&#xff0c; 从阿里钉钉跨平台协作方式&#xff0c;再到飞书上的审批流程&#xff0c;以及目前我们接触到的表单审批、投票的模板&#xff0c;这些都是关于低代码的实现方式。 一、低代码平台概述 按维基百科的说法&#xff0c;低代码这个称呼是 Forres…

大数据时代,Python实现API调用的步骤及示例代码;

Python是一种非常流行的编程语言&#xff0c;可以用于实现各种各样的应用程序&#xff0c;其中包括通过API对各种服务进行调用。API是应用程序接口的缩写&#xff0c;它提供了一种编程接口&#xff0c;允许软件开发者使用其他服务的功能&#xff0c;包括访问数据库、发送电子邮…

【重磅发布】谷云科技与海量数据完成产品兼容性互认证!

近日&#xff0c;谷云科技&#xff08;广州&#xff09;有限责任公司&#xff08;以下简称“谷云科技”&#xff09;的混合集成平台&#xff08;ipaas&#xff09;、全域数据交换平台、主数据管理平台与北京海量数据技术股份有限公司(以下简称“海量数据”)的海量数据库G100管理…

代码随想录算法训练营day57 | 647. 回文子串,516.最长回文子序列,动态规划总结篇

代码随想录算法训练营day57 | 647. 回文子串&#xff0c;516.最长回文子序列&#xff0c;动态规划总结篇 647. 回文子串解法一&#xff1a;动态规划解法二&#xff1a;双指针中心扩散法 516.最长回文子序列解法一&#xff1a;动态规划 动态规划总结篇动划基础背包问题系列打家劫…

网络安全基本概念

一、什么是网络安全 &#xff08;1&#xff09;网络安全 网络安全指网络系统中的硬件、软件以及系统中的数据受到保护&#xff0c;不因偶然或恶意的原因而遭到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 网络安全包括&#xff1a;网络…

好程序员解析:2023年物联网的发展现状和未来趋势

物联网&#xff1a;把所有物品通过信息传感设备与互联网连接起来&#xff0c;进行信息交换&#xff0c;即物物相息&#xff0c;以实现智能化识别和管理。 物联网是新一代信息技术的重要组成部分&#xff0c;也是“信息化”时代的重要发展阶段。物联网的核心和基础仍然是互联网&…

伊利与腾讯云CODING的「水乳交融」启示录

本文转载雷锋网 “对蜡烛的不断优化&#xff0c;是不可能导致电灯发明的。” 谈数字化与创新能力&#xff0c;有时会掉进这样的误区&#xff1a;更换个别工具&#xff1d;数字化&#xff1d;创新。用蜡烛打个比方&#xff0c;常见的优化是&#xff0c;让蜡烛直径变宽更防风、变…

系统分析师:全程指导例题

1、流水线 题解&#xff1a;这里假设能并行处理&#xff0c;画流水线时空图如下&#xff1a; 这里可以看到&#xff0c;处理4个数据需要15At&#xff0c;因此实际速率是4/15At&#xff0c;流水线效率为忙碌时间与总时间对比&#xff0c;也可以看成忙碌时空区/总时空区&#xff…

C++学习之旅-入门永远的HelloWorld变量的基础

文章目录 创建文件(Hello World)注释变量的使用常量标识符命名规则数据类型整形sizeof关键字实型(浮点类型)字符型转义字符字符串类型布尔类型数据的输入加减乘除运算算数运算逻辑运算 程序流程结构选择结构循环结构 跳转语句举例(while循环break)举例(for循环contine) 跳转语句…

Eclipse教程 完结(上)

Eclipse 安装插件 查找和安装插件 Eclipse作为一个集成的IDE开发工具&#xff0c;为我们的软件开发提供了便利&#xff0c;eclipse除了自带的强大功能外&#xff0c;还支持功能丰富的插件。 我们可以通过Eclipse官方市场 (Eclipse Plugins, Bundles and Products - Eclipse …

【数据集】Cityscapes-流行的语义分割数据集

本文介绍用于智能驾驶场景的语义分割数据集Cityscapes。 1. Cityscapes数据集简介 在几个月的时间里&#xff0c;在 50 个城市的春季、夏季和秋季&#xff0c;主要是在德国&#xff0c;但也在邻近国家/地区&#xff0c;从移动车辆中获取了数十万帧。它们不是故意在恶劣的天气条…

NPM 制作命令行工具 - 入门案例

一、简介 经常通过 npm 安装 vue-cli、create-react-app 之类的命令行工具&#xff0c;那么如何简单的制作一个命令行工具呢&#xff1f;只需要几步即可&#xff01; 二、制作 创建 npm 命令行工具文件夹&#xff08;例如&#xff1a;dzm-cli&#xff09; 初始化 dzm-cli&am…

1 八皇后问题

算法 八皇后问题是在国际象棋的棋盘上放八个皇后&#xff0c;八个皇后不能互相攻击。国际象棋的皇后&#xff0c;可以横向攻击也可以纵向攻击&#xff0c;也可以斜向攻击。所以要放八个皇后&#xff0c;就必须任一直线和斜线上不能同时有两个皇后。比如以下就是一个八皇后方案&…

eslint的使用

为什么要使用eslint? ​ eslint可以帮助我们统一代码语法规范。 eslint官网: https://eslint.org/ 1.vscode中改缩进 ​ 设置->tabsize-> tab-size和vetur都改成2 ​ format->格式化->勾选format on save 2.Vscode安装Eslint插件 (1)配置Eslint插件 ​ 设…

Yandex:你不可错过的全能搜索引擎

目录 前言一、Yandex网站介绍1-1、网站介绍1-2、优势 二、Yandex网站使用技巧2-1、Yandex搜索引擎2-2、Yandex Maps2-3、Yandex Mail2-4、Yandex Games2-5、Yandex Images2-6、Yandex Video2-7、Yandex.Translate 结语 前言 andex是一家俄罗斯的互联网公司&#xff0c;成立于19…

【HarmonyOS】元服务和APP的相互跳转、相互成就

【关键字】 卡片、跳转、加桌 【背景介绍】 随着鸿蒙生态的发展&#xff0c;各种类型的应用都已经可以在Harmony OS上无差异的运行&#xff0c;面对鸿蒙新兴元服务的兴起&#xff0c;各大厂家可能都在考虑一个问题&#xff1a;如果已经有APP了&#xff0c;有必要再开发一款元…

用 JavaScript 对抗 DDOS 攻击 (下)

抗 v2 之前的那些奇技淫巧&#xff0c;纯属娱乐而已&#xff0c;并不能撑多久。 但简单、好玩&#xff0c;似乎这正是对抗的乐趣。之前从未想过&#xff0c;居然还能把脚本黑科技&#xff0c;用在网络防御上。 于是&#xff0c;又陆陆续续对抗了一段时间。 直到兴致淡却&am…