MapStruct 使用

MapStruct最详细的使用教程,别在用BeanUtils.copyProperties ()

mapstruct使用和详解

项目背景

之前查看网上别人写的文章,很多都提到了BeanUtils(org.springframework.beans) 利用反射性能比较差。大家都推荐使用 MapStruct。因为这个组件使用 Java 原生的 setXxx方法,会自动生成相关代码。

代码使用

引入依赖

<dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId><version>1.4.1.Final</version>
</dependency>
<dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>1.4.1.Final</version>
</dependency>

这里使用的是 1.4.1.Final 版本,1.3.1 idea会提示包找不到

编写Mapper,告诉 MapStruct 转换前后的类型

import org.mapstruct.factory.Mappers;
import org.mapstruct.Mapper;import java.util.List;@Mapper
public interface xxxConvert{xxxConvert INSTANCE = Mappers.getMapper(xxxConvert.class);/*** 将req转换为entity*/Entity convert2Entity(Req req);/*** 将entity列表转换为resp列表*/List<Resp> convertPageList(List<Entity> list);/*** 将entity转换为dto*/Dto convert2Dto(Entity entity);
}

注意 @Mapper 是用 MapStruct 依赖(org.mapstruct.Mapper)的,不要和 MyBatis 的弄混。

点击编译后,MapStruct 就会在 target 目录下生成 实现类

在这里插入图片描述

@Generated(value = "org.mapstruct.ap.MappingProcessor",date = "2024-02-01T15:17:25+0800",comments = "version: 1.4.1.Final, compiler: javac, environment: Java 1.8.0_351 (Oracle Corporation)"
)
public class XxxConvertImpl implements XxxConvert {@Overridepublic Entity convert2Entity(Req req) {if ( req == null ) {return null;}Entity entity = new Entity();entity.setId( req.getId() );entity.setBaseErpCode( req.getBaseErpCode() );//设置相关字段...return partBase;}@Overridepublic List<Resp> convertPageList(List<Entity> list) {if ( list == null ) {return null;}List<Resp> list1 = new ArrayList<Resp>( list.size() );for ( Entity partBase : list ) {list1.add( partBaseToPartBasePageResp( entity ) );}return list1;}@Overridepublic Dto convert2Dto(Entity entity) {if ( base == null ) {return null;}//具体参考上面代码return partBaseDto;}protected Resp partBaseToPartBasePageResp(Entity entity) {if ( entity == null ) {return null;}//具体参考上面代码return partBasePageResp;}
}

结论

通过使用 MapStruct 工具,减少使用反射的次数,同时极大提升代码可读性。

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

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

相关文章

zookeeper 应该这样学

ZooKeeper 是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是 Google 的 Chubby 一个开源的实现&#xff0c;是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服务、分…

C# 使用 MailKit 接收邮件(附demo)

C# 使用 MailKit 接收邮件&#xff08;附demo&#xff09; 介绍安装包&#xff08;依赖&#xff09;案例简单代码 获取附件核心代码完整代码 介绍一下POP3 介绍 MailKit 是一个开源的 C# 邮件处理库&#xff0c;用于在应用程序中发送和接收电子邮件。它提供了一个强大且易于使…

Redis核心技术与实战【学习笔记】 - 6.Redis 的统计操作处理

1.前言 在 Web 业务场景中&#xff0c;我们经常保存这样一种信息&#xff1a;一个 key 对应了一个数据集合。比如&#xff1a; 手机 APP 中的每天用户登录信息&#xff1a;一天对应一系列用户 ID。电商网站上商品的用户评论列表&#xff1a;一个商品对应了一些列的评论。用户…

【云原生之kubernetes系列】--污点与容忍

污点与容忍 污点&#xff08;taints)&#xff1a;用于node节点排斥Pod调度&#xff0c;与亲和效果相反&#xff0c;即taint的node排斥Pod的创建容忍&#xff08;toleration)&#xff1a;用于Pod容忍Node节点的污点信息&#xff0c;即node节点有污点&#xff0c;也将新的pod创建…

Ubuntu远程连接登录信息解读(ubuntu登录信息、远程登录信息)

文章目录 1. Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-100-generic aarch64)2. 三个链接是官方提供的文档、管理工具和技术支持3. System information as of Thu 01 Feb 2024 03:30:45 PM HKT4. System load: 1.16&#xff1a;系统负载指数5. Processes: 1096系统正在运…

【AI视野·今日Robot 机器人论文速览 第七十七期】Mon, 15 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Mon, 15 Jan 2024 Totally 14 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Learning Joint Space Reference Manifold for Reliable Physical Assistance Authors Amirreza Razmjoo, Tilen Brecelj, Kri…

【智能家居入门4】(FreeRTOS、MQTT服务器、MQTT协议、微信小程序)

前面已经发了智能家居入门的1、2、3了&#xff0c;在实际开发中一般都会使用到实时操作系统&#xff0c;这里就以FreeRTOS为例子&#xff0c;使用标准库。记录由裸机转到实时操作系统所遇到的问题以及总体流程。相较于裸机&#xff0c;系统实时性强了很多&#xff0c;小程序下发…

Cache Lab:Part B(52.6/53分)【矩阵转置的分块算法】

目录 任务描述 32 32 baseline try1&#xff1a;给对角线上的块再次细分块 try2&#xff1a;对角块依次错位 成功&#xff1a;对角块两两交换 成功&#xff1a;其他方法 64 64 baseline 对角线优化普通块转置顺序调整&#xff08;7.6/8分&#xff09; 61 67 成…

Vue3+vite搭建基础架构(3)--- 使用dayjs

Vue3vite搭建基础架构&#xff08;3&#xff09;--- 使用dayjs 说明官方文档vite.config.js别名配置安装dayjs安装命令 使用dayjs将dayjs封装为自己的日期工具类使用dataUtil.js日期工具类示例 说明 这里记录下自己在Vue3vite的项目使用dayjs的过程&#xff0c;不使用ts语法&a…

最新XC主题 支持六种主题样式 去除域名授权全解密源码 一款多样式主题

Typecho 最新XC主题 去除域名授权全解密源码 这是一款多样式主题&#xff0c;首页支持六种主题样式&#xff0c;支持Pjax优化访问速度&#xff0c;多种单页&#xff0c;如友链、说说等。评论支持表情&#xff0c;自定义编辑器&#xff0c;支持其他样式功能。该主题功能性挺高&…

SQL中的left join和right join及具体实例

LEFT JOIN&#xff08;或称为左连接&#xff09;是SQL中的一种连接类型&#xff0c;它用于从两个或多个表中基于共同的列将数据组合起来。在使用LEFT JOIN时&#xff0c;查询的结果集包含左表&#xff08;LEFT JOIN语句中指定的第一个表&#xff09;的所有记录&#xff0c;以及…

音视频数字化(音频数字化)

在音视频领域,人们始终追求无限还原现场效果,因此音频越逼真越好,视频越清晰越好。之所以我们需要将音视频信号由模拟转为数字,目的是在录制、存储、编辑、复制、回放等环节的不失真,尽量保持原有细节,不因以上操作,导致音画的质量下降。 为此,视频系统分辨率越来越高,…

【Java程序设计】【C00207】基于(JavaWeb+SSM)的宠物领养管理系统(论文+PPT)

基于&#xff08;JavaWebSSM&#xff09;的宠物领养管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的宠物领养系统 本系统分为前台系统、管理员、收养者和寄养者4个功能模块。 前台系统&#xff1a;游客打开系统…

k8s-HPA

前提条件 安装有**Metrics Server**,HPA的运行监控指标需要由Metrics Server 提供 文档&#xff1a;https://github.com/kubernetes-sigs/metrics-server?tabreadme-ov-file#readme 快速自动缩放&#xff0c;每15秒收集一次指标(可配置)。 资源效率&#xff0c;为集群中的每…

网络防御安全:2-6天笔记

第二章&#xff1a;防火墙 一、什么是防火墙 防火墙的主要职责在于&#xff1a;控制和防护。 防火墙可以根据安全策略来抓取流量之后做出对应的动作。 二、防火墙的发展 区域&#xff1a; Trust 区域&#xff0c;该区域内网络的受信任程度高&#xff0c;通常用来定义内部…

计算机中的缓存与内存

在现代计算机系统中&#xff0c;缓存和内存扮演着至关重要的角色&#xff0c;它们共同协作以实现高性能和高效率的数据处理。本文将深入探讨缓存和内存的概念、功能以及它们在计算机系统中的作用。 缓存与内存&#xff1a;概念与功能 1. 内存&#xff08;RAM&#xff09;&…

代码随想录算法训练营第三十二天| 738.单调递增的数字 ,968.监控二叉树

738.单调递增的数字 代码随想录 从后往前遍历 class Solution {public int monotoneIncreasingDigits(int n) {String s String.valueOf(n);char[] chars s.toCharArray();int start s.length();for (int i s.length() - 2; i > 0; i--) {if (chars[i] > chars[i 1…

数据库管理-第142期 DBA?DBA!(20240131)

数据库管理142期 2024-01-31 数据库管理-第142期 DBA&#xff1f;DBA&#xff01;&#xff08;20240131&#xff09;正文总结 数据库管理-第142期 DBA&#xff1f;DBA&#xff01;&#xff08;20240131&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff09…

VSCode 设置代理

Open Visual Studio Code, click the settings icon in the lower left corner, and click Settings.

yii2 mongodb 操作

->where([<>,review,""]) 不等于空 $where [newstypeid>[$in>$categoryIdArr]]; 类似mysql in操作 &#xff08;$categoryIdArr是数组&#xff09; ->where([label>[$regex >赞美诗]]) 模糊搜索操作 $where [status>1,name>[$rege…