首页 > 其他分享 >学习MapStruct

学习MapStruct

时间:2023-01-23 21:56:56浏览次数:37  
标签:映射 MapStruct 学习 mapstruct Student import com

概述

MapStruct是一个Java注释处理器,用于生成类型安全的bean映射类。
您要做的就是定义一个映射器接口,该接口声明任何必需的映射方法。在编译期间,MapStruct将生成此接口的实现。此实现使用简单的Java方法调用在源对象和目标对象之间进行映射,即没有反射或类似内容。
与手动编写映射代码相比,MapStruct通过生成繁琐且易于出错的代码来节省时间。遵循配置方法上的约定,MapStruct使用合理的默认值,但在配置或实现特殊行为时不加理会。

与动态映射框架相比,MapStruct具有以下优点:
通过使用普通方法调用(settter/getter)而不是反射来快速执行
编译时类型安全性:只能映射相互映射的对象和属性,不能将order实体意外映射到customer DTO等。
如果有如下问题,编译时会抛出异常
3.1 映射不完整(并非所有目标属性都被映射)
3.2 映射不正确(找不到正确的映射方法或类型转换)

为什么要用 MapStruct

MapStruct出现之前项目中大多用的都是BeanUtils.copy...此类的方式。BeanUtils缺陷明显比如 效率低下、复杂属性的复制问题、内嵌对象的复制问题。这些问题都可以在MapStruct中得到很好的解决。

MapStruct依赖

    <!--mapstruct插件依赖-->
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>1.5.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>1.5.0.Final</version>
    </dependency>

测试实体类


import lombok.Data;

import java.util.List;

@Data
public class Student {
    private String name;
    private int age;
    private List<String> course;
}

import lombok.Data;

import java.util.List;

@Data
public class StudentVo {
    private String name;
    private int age;
    // 此处课程名称不一样
    private List<String> courses;
}

映射接口类(加强了复杂属性的替换)

@Mapper 接口类注解
@Mapping 接口类方法注解(复杂属性的替换)
其他属性可以查看源码---很简单


import com.dahan.bean.Student;
import com.dahan.vo.StudentVo;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

/**
 * 转换类映射类
 */
@Mapper
public interface StudentMapper {
    StudentMapper INSTANCE = Mappers.getMapper(StudentMapper.class);

    @Mapping(source = "course", target = "courses")
    StudentVo convert(Student student);
}

测试类

package com.dahan;

import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;
import com.dahan.bean.Student;
import com.dahan.model.StudentMapper;
import com.dahan.vo.StudentVo;

public class MapStructTest {
    public static void main(String[] args) {
        Student studentSource = new Student();
        studentSource.setName("刘德华");
        studentSource.setAge(60);
        List<String> strings = new ArrayList<>();
        strings.add("语文");
        strings.add("数学");
        strings.add("物理");
        studentSource.setCourse(strings);
        StudentVo studentTarget = StudentMapper.INSTANCE.convert(studentSource);
        System.out.println("Student: " + JSON.toJSONString(studentSource));
        System.out.println("StudentVo: " + JSON.toJSONString(studentTarget));

    }
}

测试结果

image

标签:映射,MapStruct,学习,mapstruct,Student,import,com
From: https://www.cnblogs.com/csh520mjy/p/17065570.html

相关文章

  • ABB 800XA学习笔记46:工程组态界面5
    这篇血洗闭集我在新浪博客发表过,地址是ABB800XA学习笔记46:工程组态界面5_来自金沙江的小鱼_新浪博客(sina.com.cn)再则、在这里我也记录一遍,以免丢失继续学习4.4.4库......
  • 通过具体的两个例子,学习 ABAP 动态断点的使用诀窍
    本教程之前的步骤,我们学习了SAPGUI中ABAP调试器的使用方式:13.最浅显易懂的SAPGUI里ABAP调试器的使用方法介绍借助这个有用的程序调试工具,我们可以自行找到一......
  • ABB 800XA学习笔记44:工程组态界面3
    这一片学习笔记我在新浪博客记录过,地址是ABB800XA学习笔记44:工程组态界面3_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里也记录一遍,以免丢失继续学习。4.3 工程工作......
  • ABB 800XA学习笔记45:工程组态界面4
    这一篇博客我在新浪博客记录过,地址是ABB800XA学习笔记45:工程组态界面4_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里也记录一遍,以免丢失接着学习。4.4 用于应用工程......
  • ABB 800XA学习笔记42:工程组态界面1
    这一片学习笔记我在新浪博客发表过,地址是ABB800XA学习笔记42:工程组态界面1_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里也记录一遍,以免丢失开始第四章学习。又是英文......
  • ABB 800XA学习笔记43:工程组态界面2
    这一片学习笔记我在新浪博客记录过,地址是ABB800XA学习笔记43:工程组态界面2_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里也记录一遍,以免丢失继续学习。新浪博客访问量......
  • ABB 800XA学习笔记40:S800 IO产品指南那5
    这一篇学习笔记我在新浪博客记录过,地址是ABB800XAxuexibiji40:S800IO产品指南5_来自金沙江的小鱼_新浪博客(sina.com.cn)我在这里也记录一次,以免丢失AC800F/M带有冗余I/......
  • ABB 800XA学习笔记38: S800 IO产品指南3
    这一篇博客我在新浪博客记录过,地址是ABB800XA学习笔记38:S800IO产品指南3_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里我也记录一遍,以免丢失继续学习,学习虽然枯燥,为了......
  • ABB 800XA学习笔记39:S800 IO产品指南4
    这一片学习笔记我在新浪博客记录过,地址是ABB800XA学习笔记39:S800IO产品指南4_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里我也记录一遍,以免丢失接着做笔记AC800F/......
  • ABB 800XA学习笔记37:S800 IO产品指南2
    S800开关量IO模件所有I/O模件都有与机架地电流隔离功能,均有指示通道状态及模件状态的指示灯,本质安全模件还有通道错误状态指示。S80024/48VDCI/O模件由互相隔离......