zoukankan      html  css  js  c++  java
  • 2、MapStruct 深入理解

    在深入学习MapStruct之前,我们先设想下实体转换场景,在一般的实体转换的场景下,我们需要考虑一下的问题:

    1、字段名称之间的映射,比如:Person实体中的name属性需要映射到PersonDto实体中的name属性

    2、属性值之间的映射,比如:Person实体中age属性为short,PersonDto实体中的age属性为int。两个类型之间的转换存在数据的缺失

    3、空值问题

    4、类的聚合问题。比如Person中还有country实体,两个实体间的country怎么映射

    5、部分属性之间不想被映射:比如deptName不需要转换

    @Data
    public class Person{
    String name ;
    short age ;
    String deptName ;
    Country country; }
    @Data
    public class PersonDto{
    String name ;
    int age ;
    Country country; }

    MapStruct具有强大的注解,我们通过注解均可以解决上述问题。

    @Mapper
    public interface SourceTargetMapper {
        @Mapping(source = "name",target = "name")
        @Mapping(source = "age",target = "age")
        @Mapping(target = "deptName" , ignore = true)
        PersonDto toDto(Person person);
    }

    编译完成后,MapStruct会自动生成代码,方便我们调试程序,我们在target中可以找到相应的程序代码。

    Mapper注解:表示这个接口做为一个转换器,Mapping:表示字段之间的映射关系。当然框架中还有更多的注解,下面是我做的思维导图。

    下面是对MapStruct的注解做的思维导图,方便对此框架的理解。

     重点介绍下:BeforeMapping 、 AfterMapping 、 ObjectFactory 、Context

    1、BeforeMapping、AfterMapping:表示的是转换动作之前或是之后需要执行的动作

    2、ObjectFactory:由于我们转换到目标对象,一般执行都是目标对象的默认构造函数。此方法帮助我们生成一个对象

    3、Context:我们在转换动作之前或是之后需要执行一系列的动作,那么数据怎么传送。context负责数据之间的共享。

  • 相关阅读:
    netty的ChannelPipeline执行顺序对inBound和outBound执行器造成的影响
    【转载,并做少量修改整合】Java 双亲委派模型与应用:SPI(Service Provider Interface)
    JDK1.8 论ConcurrentHashMap是如何扩容的
    如何解决Vue.js里面noVNC的截图问题之后篇——用web虚拟终端作为替代功能
    hihocoder 1036 Trie图
    Codeforces#390
    Codeforces#386
    codeforces 743D Chloe and pleasant prizes
    codeforces 742E (二分图着色)
    洛谷 P1280 尼克的任务题解
  • 原文地址:https://www.cnblogs.com/sunxianbiao/p/12706666.html
Copyright © 2011-2022 走看看