mapstruct学习笔记-pojo之间的转换

1、前言

mapstruct中常用注解如@Mapping,@AfterMapping,@BeanMapping等的使用,通过案例说明各式各样的业务pojo对象之间如何借助mapstruct完成相互之间的转换,减少代码量的同时也能突出业务逻辑流程,让你的代码里写起来更有规范可言。

2、简介

Reference Guide – MapStruct

3、使用场景

主要用于pojo之间的转换。

不同的convert方案:

4、mapstruct使用 

4.1 不使用mapstruct的缺点

  • 多与杂的代码与业务代码耦合,可读性差
  • 重复的劳动

cardto业务对象:

partdto:

driverdto:

 carvo:

drivervo:

partvo:

测试类:

 

 

 

4.2 mapstuct使用方法

  • 引入依赖
  • 新建抽象类或者接口并标注@mapper注解
  • 写转换方法,方法名任意(eg. dto2vo
  • 获取对象并使用
4.2.1 引入依赖

4.2.2 新建抽象类或者接口并标注@mapper注解

4.2.3 car转化pojo案例

CarConvert抽象类:

测试类:

4.3 默认的映射规则

4.4 @Mappings和@Mapping

需求1:处理成保留2位小数

代码实现:通过@mapping实现

测试类:

需求2:publishDate处理格式

代码:

需求3 vo中的color不从dto中映射:设置ignore

 需求4: 当属性是引用类型时,如何映射?如driverdto

代码:

 结果:

4.5 Aftermapping和mappingtarget

 通过mapstruct处理不了的或者不好处理的场景,我们自己自定义处理。

需求:处理vo中hasPart的值

抽象类增加方法:

结果:

4.5 批量转换

需求:list ---> list

冗余实现:

mapstruct实现:

测试类:

4.6 @BeanMapping

配置一个id测试:

 

4.7 @InheritConfiguration

继承配置,用于更新的场景。

测试类:

4.8 @InheritInverseConfiguration

反向继承配置。

写法1:

测试类:

 改进写法1:(假如配置很多属性,一行一行写太麻烦)

4.9 与spring结合使用

直接调用会报错:

需要加入下面的配置:即可在测试类调用

@Mapper(componentModel="spring")

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

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

相关文章

记录解决问题--activiti8.2 流程图图片由png改为svg前端不显示图片问题

1.说明 如果是vue svg显示,请查阅其他标准资料,类似使用svg标签。我这里讲的另外一种情况,链接返回的是svg文件,需要用v-html显示图片。 2.activiti6流程图图片格式 ①png格式。可以查看链接返回,以png开头。 ②前端…

scDEA一键汇总12种单细胞差异分析方法 DESeq2、edgeR、MAST、monocle、scDD、Wilcoxon

问题来源 单细胞可以做差异分析,但是究竟选择哪种差异分析方法最靠谱呢? 解决办法 于是我去检索文献,是否有相关研究呢? https://academic.oup.com/bib/article/23/1/bbab402/6375516 文章指出,现有的差异分析方法…

Vmware虚拟机强制退出Ubuntu后无法开启,报错【开机时出错: VMware Player 无法连接到虚拟机。】

1. 现象 虚拟机强制退出Ubuntu后无法开机,报错如下: 2. 解决方法 任务管理器结束VMware相关的任务

JS加密解密之字符编码知识

在前端开发中,字符编码是一个至关重要的概念,特别是在数据传输、加密和解密等方面。JavaScript作为一种常用的脚本语言,在处理字符编码时也有其独特之处。本文将详细介绍JavaScript中的字符编码知识,包括字符编码的分类和相关案例…

SpringCloud从入门到精通速成(二)

文章目录 1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添加配置文件1.1.2.从微服务拉取配置 1.2.配置热更新1.2.1.方式一1.2.2.方式二 1.3.配置共享1)添加一个环境共享配置2)在user-service中读取共享配置3)运行两个UserApplication&…

【算法】数论——蓝桥杯笔记、最大公约数、欧拉函数模版、线性筛法求欧拉函数、快速幂 a^k%p、扩展欧几里得算法

文章目录 蓝桥杯* 最大公约数欧拉函数模版* 线性筛法 求欧拉函数* 快速幂 a^k%p扩展欧几里得算法 蓝桥杯 * 最大公约数 两个整数的最大公约数等于其中较小的那个数和两数的差的最大公约数。通过不断地用较小的数替换较大的数,并用两数的差替换较小的数,…

ElasticSearch文档操作[ES系列] - 第502篇

历史文章(文章累计500) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

阿里云OSS存储的视频如何加水印

OSS是不能进行视频添加水印的,可以图片添加水印。 您可以在视频点播中进行配置: https://help.aliyun.com/zh/vod/user-guide/video-watermarks?spma2c4g.11186623.0.i2 原来的业务代码都是使用python 对oss的 视频进行上传 的,上传的视频路径已经保存到…

qt5-入门-国际化

参考: Qt 国际化(上)_w3cschool https://www.w3cschool.cn/learnroadqt/fwkx1j4j.html QT5实现语言国际化(中英文界面动态切换,超详细)_qt qevent::languagechange-CSDN博客 https://blog.csdn.net/m0_49047167/article/details/…

鸿蒙Harmony应用开发—ArkTS(stateStyles:多态样式)

Styles和Extend仅仅应用于静态页面的样式复用,stateStyles可以依据组件的内部状态的不同,快速设置不同样式。这就是我们本章要介绍的内容stateStyles(又称为:多态样式)。 概述 stateStyles是属性方法,可以…

基于springboot的4S店车辆管理系统

基于springboot的4S店车辆管理系统 的设计和实现 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开…

c语言食堂就餐排队问题290行

定制魏:QTWZPW,获取更多源码等 目录 题目 数据结构 函数设计 结构设计 总结 效果截图 ​ 主函数代码 题目 设计一个程序来模拟食堂就餐排队问题,通过输入学生人数和面包数量,计算有多少学生能够吃到午餐。 数据结构 该…

数字资产管理系统、企业数字资产管理软件

数字资产管理系统(DAMS)是一系列软件,它提供了一个开放平台,支持对多媒体数据的采集、创建、管理、存储、归档、检索、传输和显示。这些多媒体数据包括图像、视频、声音、文本和电影剪辑等。这些基础软件不仅是内容创作&#xff0…

使用React搭建single-spa

自己搭建的Demo GitHub - ftao123/single-spa-react-demo: single-spa-react-demo 修改子应用的webpack配置 library: "app2"和libraryTarget: "umd"配置必须添加。 可以看到filename在开发环境下的地址是static/js/bundle.js,所以我们主应用…

Java多线程自定义线程池——线程池的七大参数和四大拒绝策略

线程池 2.1 线程池思想 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统…

Linux/Bizness

Enumeration nmap 用 nmap 扫描了常见的端口,发现对外开放了22,80,443 ┌──(kali㉿kali)-[~] └─$ nmap 10.10.11.252 Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-08 01:21 EST Nmap scan report for 10.10.11.252 Host is up (0.36s latency). Not…

python 空间距离计算

目录 python 空间距离计算 已知两点,画三角形 批量矩阵计算 python 空间距离计算 要在空间中找到一个点,使其位于点 b 和 c 之间的连线上,并且与点 b 的距离等于点 a 到点 b 的距离的2倍。 import numpy as npif __name__ __main__:a …

MySQL下载安装和本地连接

1、下载MySQL 从MySQL官网下载MySQL Community Server版本: 下载地址:MySQL官网 1、进入官网,点击DOWNLOADS 2、点击MySQL Community(GPL)Downloads 3、点击MySQL Installer for Windows 4、这个会直接跳转到最新的版本 如果想下载以往的…

题目:笨笨机器人(蓝桥OJ 3262)

问题描述: 解题思路: 用n位二进制数每位来表示每一步的状态,2的n次幂即使全部可能。遍历计算全部符合题意总数,再用cnt/(2的n次幂)即答案。 需要注意的是,四舍五入后四位的方法:round(),可以四舍…

计算机网络——数据链路层(数据链路层功能概述)

计算机网络——数据链路层(数据链路层功能概述) 数据链路层的功能数据链路层的基本概念封装成帧和透明传输 我们之前已经学完了物理层的所有内容,今天开始我们要进入数据链路层的学习,如果有小伙伴对物理层的内容感兴趣的话&#…