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负责数据之间的共享。

  • 相关阅读:
    SharePoint客户端开发:增加用户信息到用户信息列表
    Query Options的一些用法(5):日历的处理
    User Profile Service卡在Starting的解决方法
    python enumerate用法
    希腊字母的发音
    在Linux下安装go语言环境
    Gradle的安装与使用
    学习正太分布及极差、移动极差、方差、标准差等知识点
    招聘还是炫耀,设计模式是装逼利器?
    Silverlight + RIA Service的SUID的实例。
  • 原文地址:https://www.cnblogs.com/sunxianbiao/p/12706666.html
Copyright © 2011-2022 走看看