Mapstruct类型转换Person ->PersonDTO以及po、vo、dto、request概念

news2024/11/25 14:33:53

文章目录

  • po、vo、dto、request
  • Person ->PersonDTO
    • 安装插件
    • 引入依赖
    • Maven项目结构图
    • Person 与 PersonDTO
    • Converter

po、vo、dto、request

Mapstruct 完成类型转换!

po:数据持久层对象,用于映射数据库中的表
dto:数据传输对象,从数据库中查出来、redis中查出来的数据的封装,后端与后端之间数据传输时使用
vo:视图对象,用于向 前端展示数据时使用
request: 前端发过来的请求
在这里插入图片描述

Person ->PersonDTO

安装插件

在这里插入图片描述

如果不指定@Mapping,默认映射name相同的field
如果映射的对象field name不一样,通过 @Mapping 指定。
忽略字段加@Mapping#ignore() = true

引入依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!--mapStruct依赖 高性能对象映射-->
<!--mapstruct核心-->
<dependency>
  <groupId>org.mapstruct</groupId>
  <artifactId>mapstruct</artifactId>
  <version>1.5.0.Beta1</version>
</dependency>

<!--mapstruct编译-->
<dependency>
  <groupId>org.mapstruct</groupId>
  <artifactId>mapstruct-processor</artifactId>
  <version>1.5.0.Beta1</version>
</dependency>


<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.24</version>
</dependency>

Maven项目结构图

在这里插入图片描述

Person 与 PersonDTO

Person

import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

@Data
public class Person {

    String describe;

    private String id;

    private String name;

    private int age;

    private BigDecimal source;

    private double height;

    private Date createTime;

}

PersonDTO

import lombok.Data;

@Data
public class PersonDTO {

    String describe;

    private Long id;

    private String personName;

    private String age;

    private String source;

    private String height;
    private String createTime;
}

Converter

import com.example.demo.bean.dto.PersonDTO;
import com.example.demo.bean.po.Person;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;

@Mapper(uses = MyUtil.class)
public interface PersonConverter {
    PersonConverter INSTANCE = Mappers.getMapper (PersonConverter.class);

    // source 是 参数的属性值常量值
    @Mapping(target = "personName", source = "name")
    @Mapping(target = "id", ignore = true)// 忽略id,不进行映射
    @Mapping(target = "createTime", qualifiedByName = "dateToString") // dateToString 与@Named("dateToString")对应
    @Mapping(target = "age", qualifiedByName = "ageAdd10")
    PersonDTO person2DTO(Person person);

    public static void main(String[] args) {
        Person person = new Person ();
        person.setId ("1");
        person.setDescribe ("测试");
        person.setAge (18);
        person.setName ("张三");
        person.setHeight (170.5);
        person.setCreateTime (new Date ());
        person.setSource (new BigDecimal ("100"));

        PersonDTO dto = PersonConverter.INSTANCE.person2DTO (person);

        System.out.println (dto);
        // PersonDTO(describe=测试, id=null, personName=张三, age=28, source=100, height=170.5,createTime=2022-12-13)
    }
}

class MyUtil {

    @Named("dateToString")
    // 将 参数中的属性值:source传进来
    // 然后计算 得到结果赋值给 target
    public static String dateToString(Date date) {
        return date == null ? "" : new SimpleDateFormat ("yyyy-MM-dd").format (date);
    }

    @Named("ageAdd10")
    // 将 参数中的属性值:source传进来
    // 然后计算 得到结果赋值给 target
    public static String ageAdd10(int age) {
        return String.valueOf (age + 10);
    }
}



运行结果:
在这里插入图片描述

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

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

相关文章

各类软件研发行业源代码防泄密需求分析

各类软件研发行业&#xff0c;都有自己的核心数据以及核心文档&#xff0c;用户数据等敏感信息&#xff0c;这些信息数据有以下共性&#xff1a; 属于核心机密资料&#xff0c;万一泄密会给造成恶劣影响 核心数据类型多&#xff0c;有源代码数据&#xff0c;员工计算机水平高…

[附源码]Nodejs计算机毕业设计基于web的图书借阅管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

2-3查找树-树-数据结构和算法(Java)

文章目录1 概述2 查找3 插入3.1 向2-结点中插入新键3.2 向一个只含有一个3-结点的树中插入新键3.3 向一个父结点为2-结点的3-结点中插入新键3.4 向一个父结点为3-结点的3-结点中插入新键4 分析4.1 局部变换4.2 全局性质5 后记1 概述 我们前面学习过关于二叉树的算法已经能够很…

CDN工作原理以及使用CDN的好处

所有的大厂以及其他很多互联网公司都使用了CDN&#xff0c;那CDN到底是什么呢&#xff1f;为什么要使用&#xff1f;一起来看看吧&#xff01; 文章目录1. 什么是CDN&#xff1f;2. CDN 是怎么工作的&#xff1f;3. 使用 CDN 有什么好处&#xff1f;3.1 缩短网站加载时间3.2 减…

Zookeeper[2]- Zookeeper集群环境搭建

前边步骤可参考: Zookeeper[1]-Zookeeper介绍与安装以及集群环境准备_豆虫儿的博客-CSDN博客Zookeeper的介绍和安装Zookeeper客户端使用ZookeeperJavaAPI使用我们为了学习Dubbo&#xff0c;而在dubbo中需要一个注册中心&#xff0c;而Zookeeper是我们在使用Dubbo是官方推荐的…

作业-12.13【使用QT制作一个简单的登录界面】

#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //设置窗口属性 this->setWindowTitle("Sumeru Dance Training"); this->setFixedSize(8…

[激光原理与应用-52]:《激光焊接质量实时监测系统研究》-3-传感器选型和电路设计

目录 3.1 传感器的选取 3.1.1 光电探测基本概念 3.1.2 可见光传感器 3.1.4 声音传感器 3.2 信号调理电路 3.2.0 可见光电信号前置放大电路 3.2.1 红外光电信号前置放大电路 3.2.2 程控自适应增益的光信号放大电路 3.2.3 光信号滤波电路 3.2.4 声信号调理电路 3.3 数据…

【图像处理】边缘检测算子有哪些以及它们之间的对比

这个问题应该是做过传统图像处理的人都接触过的吧。粗略总结下&#xff0c;应该也不会问太细&#xff0c;面试官大概就考察下大家的知识面吧。 综述 边缘检测是图像处理和计算机视觉中&#xff0c;尤其是特征提取中的一个研究领域。图像边缘检测大幅度地减少了数据量&#xf…

第五章. 可视化数据分析图表—常用图表的绘制3—散点图,面积图,热力图

第五章. 可视化数据分析图 5.3 常用图表的绘制3—散点图&#xff0c;面积图&#xff0c;热力图 本节主要介绍常用图表的绘制&#xff0c;主要包括散点图&#xff0c;面积图&#xff0c;热力图。 1.散点图&#xff08;matplotlib.pyplot.scatter&#xff09; 散点图主要用来查…

Redux Hooks actions 调用方式优化(一)

hooks 可以说是现在react编程的的主流&#xff0c;redux 迎合这个主流也推出 toolkit 工具集来。但是在用toolkit 搭建前端框架后&#xff0c;给人的感觉就是比原先的connect 那一套好些&#xff0c;但用起来还是挺繁琐的。 一 toolkit 搭建的正常使用版本 1.1 创建store im…

三、pcm音频转wav

前言 ffmpeg录制下来的音频为pcm格式&#xff08;内部存储着十六进制数据&#xff09;&#xff0c;但pcm格式的音频无法直接播放 本文先将pcm转换成wav格式&#xff08;提要提前了解音频知识&#xff09; 首先分析wav文件格式&#xff08;wav的本质是在pcm数据前加上文件头&a…

[附源码]Node.js计算机毕业设计电子工厂进销存管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

《Linux运维总结:Centos7.6使用yum安装Mysql8.0.31》

一、使用yum安装mysql服务 官方&#xff1a;下载对应的yum源 1、yum源下载 [rootlocalhost ~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm [rootlocalhost ~]# rpm -ivh mysql80-community-release-el7-7.noarch.rpm如下图所示&#xff1a;…

vsftpd 升级3.0.2-29 和 增加账号访问

一、下载文件至/opt 百度网盘&#xff1a; 链接: https://pan.baidu.com/s/1Ad20bm5fvw8WvtaV3uHGYA 提取码: 2pa9 二、安装 2.1、切换目录 命令&#xff1a;cd /opt 2.2、授权 命令&#xff1a;chmod x centos7.6-vsftpd-upgrade.sh 2.3、安装 命令&#xff1a;./cent…

D. Lucky Chains(gcd + 线性筛)

Problem - D - Codeforces 如果一对正整数(x,y)的最大公除数等于1(gcd(x,y)1)&#xff0c;我们就把它们命名为幸运。 让我们把由(x,y)引起的链定义为一个由(x,y), (x1,y1), (x2,y2), ..., (xk,yk)组成的序列&#xff0c;对于某个整数k≥0。 如果链中的所有配对都是幸运的&…

2022-12-13 note

1、linux内核的特点 1. linux内核是完全开源的作者&#xff1a;linusgit --> 代码版本管理工具 2. linux内核源码支持多种不同的架构&#xff0c;比如arm架构&#xff0c;powerPC,mips,Risc-V,X86等 3. linux内核采用模块化的编译的思想 4. 在linux内核中只允许出现C代码或…

优秀的PM如何轻松应对公司90%以上的沟通难题

项目经理和PMO工作中最多的事情往往是沟通&#xff0c;但是你在工作中会不会遇到很多沟通难题&#xff1f;如果其他环节的人处理不好还可以理解&#xff0c;但是咱们处理不好就说不过去了&#xff0c;并且还会让人感觉不专业&#xff0c;丧失很多机会&#xff0c;甚至失去领导的…

代码随想录Day49|121.买卖股票的最佳时期、122.买卖股票的最佳时期II

文章目录121.买卖股票的最佳时期、122.买卖股票的最佳时期II121.买卖股票的最佳时期、 文章讲解&#xff1a;代码随想录 (programmercarl.com) 题目链接&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给定一个数组 prices…

Metal每日分享,调整灰度系数gamma滤镜效果

本案例的目的是理解如何用Metal实现灰度系数效果滤镜&#xff0c;输入像素rgb进行次方运算获取到新的rgb&#xff1b; Demo HarbethDemo地址 实操代码 // 灰度系数滤镜 let filter C7Gamma.init(gamma: 3.0)// 方案1: ImageView.image try? BoxxIO(element: originImage,…

[附源码]Node.js计算机毕业设计儿童闲置物品交易网站Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…