首页 > 其他分享 >使用MapStruct进行对象的转换

使用MapStruct进行对象的转换

时间:2023-12-20 13:55:18浏览次数:20  
标签:var1 sourceToTarget MapStruct 同名 List param return 对象 转换

在 Java 系统工程开发过程中,都会有各个层之间的对象转换,比如 VO、DTO、PO、VO 等,而如果都是手动get、set又太浪费时间,还可能操作错误,
选择一个自动化工具会更加方便。目前市面上有大概12种类型转换的操作,如下:
MapStruct可以直接在编译期间生成get set方法,非常方便快捷,且不耗费性能.

  1. 导包,导入 MapStruct的maven包
            <!-- MapStruct begin -->
            <!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct -->
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct</artifactId>
                <version>1.4.2.Final</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct-processor -->
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.4.2.Final</version>
            </dependency>
            <!-- MapStruct end -->
  1. 新建接口

/**
 * @Name IMapping
 * @Author xiaoLi
 * @Date 2023/12/20 星期三 10:58
 */

@MapperConfig
public interface IMapping<SOURCE, TARGET> {
    /**
     * 映射同名属性
     *
     * @param var1 源
     * @return 结果
     */
    @Mapping(target = "createTime", dateFormat = "yyyy-MM-dd HH:mm:ss")
    TARGET sourceToTarget(SOURCE var1);

    /**
     * 映射同名属性,反向
     *
     * @param var1 源
     * @return 结果
     */
    @InheritInverseConfiguration(name = "sourceToTarget")
    SOURCE targetToSource(TARGET var1);

    /**
     * 映射同名属性,集合形式
     *
     * @param var1 源
     * @return 结果
     */
    @InheritConfiguration(name = "sourceToTarget")
    List<TARGET> sourceToTarget(List<SOURCE> var1);

    /**
     * 反向,映射同名属性,集合形式
     *
     * @param var1 源
     * @return 结果
     */
    @InheritConfiguration(name = "targetToSource")
    List<SOURCE> targetToSource(List<TARGET> var1);

    /**
     * 映射同名属性,集合流形式
     *
     * @param stream 源
     * @return 结果
     */
    List<TARGET> sourceToTarget(Stream<SOURCE> stream);

    /**
     * 反向,映射同名属性,集合流形式
     *
     * @param stream 源
     * @return 结果
     */
    List<SOURCE> targetToSource(Stream<TARGET> stream);
}

  1. 继承这个接口
    定义接口 AwardMapping 继承 IMapping<DrawAwardVO, AwardDTO> 做对象转换操作
    如果一些接口字段在两个对象间不是同名的,则需要进行配置,就像 uId -> userId

/**
 * @Name AwardMapping
 * @Author xiaoLi
 * @Date 2023/12/20 星期三 10:58
 */
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, unmappedSourcePolicy = ReportingPolicy.IGNORE)

public interface AwardMapping extends IMapping<DrawAwardVO, AwardDTO> {
    @Mapping(target = "userId", source = "uId")
    @Override
    AwardDTO sourceToTarget(DrawAwardVO var1);

    @Override
    DrawAwardVO targetToSource(AwardDTO var1);
}

标签:var1,sourceToTarget,MapStruct,同名,List,param,return,对象,转换
From: https://www.cnblogs.com/xiaolibiji/p/17916339.html

相关文章

  • js 处理对象数组 + map 筛选出指定字段数据 + filter过滤重复数据/指定数据
    constres=[{id:1,name:'zhangsan',age:16,gender:0},{id:1,name:'zhangsan',age:16,gender:0},{id:2,name:'lisi',age:20,gender:1}];获取res中的id和name/*[{"id&......
  • let a={name:'111',age:222} 如果b是空对象,a中的属性都是空,如果b中的属性是空,a中的属
    leta={name:'111',age:222};letb={};//Iterateoverthepropertiesofafor(letpropina){if(a.hasOwnProperty(prop)){//Assignanemptystringtothepropertyinaa[prop]='';}}console.log(a);{name......
  • Spring对象创建的两种方式
    Spring作为Java企业级应用的领先框架,其对象创建机制无疑是其核心特性之一。在本文中,我们将专注于Spring中的两种对象创建方式,并深入探讨它们的原理和应用场景。简单对象的创建:构造方法与反射1.1构造方法与对象创建在日常Java开发中,对象通常是通过其构造方法进行创建的。这种......
  • mapstruct报错 No property named "XXXX" exists in source parameter(s). Type "XXXX
    1、问题现象java:Nopropertynamed"XXXX"existsinsourceparameter(s).Type"XXXX"hasnoproperties.2、相关环境依赖版本jdk:17maven:3.8.8springboot:3.1.4lombok:1.18.30mapstruct:1.5.53、解决办法在pom.xml中加入如下配置<annotationProcessor......
  • html的文档对象模型的基础操作
    可以理解为前端html中的节点,整个html页面由各种各样的文档对象模型组成本文中简单介绍文档对象模型的基础操作1.获取元素//通过ID获取元素letheaderElement=document.getElementById('header');//通过类名获取元素集合letparagraphs=document.getElementsByClassName(......
  • day23 面向对象进阶
    属性查找顺序:对象本身→类对于类而言,self就是一个普通形参对于对象而言,self就是对象本身 类的继承:减少重复#自己写的时候不推荐使用继承继承多个的时候功能会混乱继承后子类会拿到父类的所有东西classfather():classson(father):继承后的属性查找顺序:对象自己→类→父......
  • 使用网关采集modbus设备数据转换成profinet协议的方案
    1 方案描述这个方案是使用vfbox网关采集modbus设备的数据,然后转换成profinet协议发送给平台。这种转换方法只需要简单的配置网关参数,不需要进行软件编程,很方便的就把modbus数据转换成了profinet协议。在电脑上通过软件配置网关参数,告诉网关要采集的数据的寄存器地址,然后在配置一下......
  • 理解ROS2的坐标转换模块tf2
    0概述tf2是ROS的核心库之一,它记录了所有坐标系的转换关系,包括动态坐标转换tf,和静态坐标转换tf_static;首先,介绍tf2库(即,geometry2)编译/调试环境的搭建步骤;然后,介绍部分的类图结构,和调用时序;1搭建ROS2的编译环境参考:http://docs.ros.org/en/iron/Installation/Ubuntu-Install-D......
  • spring boot 配置get方法枚举转换策略
    配置转换器@SuppressWarnings({"rawtypes","unchecked"})publicclassCompositeEnumConverterFactoryimplementsConverterFactory<String,Enum<?>>{ @Override public<TextendsEnum<?>>Converter<String,T>getC......
  • 深入解析 Python 中的对象创建与初始化:__new__ 与 __init__ 方法
    Python中的面向对象编程涉及许多特殊方法,其中__new__和__init__是两个关键的方法。它们分别负责对象的创建和对象的初始化,在对象的生命周期中扮演着不同而又互补的角色。让我们深入探讨这两个方法,了解它们的作用、区别以及如何在实际开发中应用。1. __new__方法当谈到Pyth......