首页 > 其他分享 >MapStruct - 注解汇总

MapStruct - 注解汇总

时间:2024-06-13 08:59:24浏览次数:17  
标签:String 映射 MapStruct 汇总 public default link 注解 Class

@Mapper

@Mapper 将接口或抽象类标记为映射器,并自动生成映射实现类代码。

public @interface Mapper {
    // 引入其他其他映射器
    Class<?>[] uses() default {};
    // 将类import 到生成的实现类中
    // 可以使用 {@link mapping#expression()}表达式中引用这些类型,{@link Mapping#defaultExpression()}使用他们简单的名字,而不是完全限定的名字。
    Class<?>[] imports() default {};
    // 源类型未被映射时的策略,默认忽略
    ReportingPolicy unmappedSourcePolicy() default ReportingPolicy.IGNORE;
    // 目标类型未被映射时的策略,默认警告
    ReportingPolicy unmappedTargetPolicy() default ReportingPolicy.WARN;
    // 转换存在精度损失的的策略
    ReportingPolicy typeConversionPolicy() default ReportingPolicy.IGNORE;
    // 指定生成的映射器应该使用的组件模型,比如Spring bean、CDI等
    String componentModel() default "default";
    // 指定实现类的名称。默认加上Impl 后缀
    String implementationName() default "<CLASS_NAME>Impl";
    //  指定生成实现类的包名。默认当前包
    String implementationPackage() default "<PACKAGE_NAME>";
    // 引入一个用 {@link MapperConfig} 注解的配置
    Class<?> config() default void.class;
    // 集合类型属性的值时应用的策略。
    CollectionMappingStrategy collectionMappingStrategy() default CollectionMappingStrategy.ACCESSOR_ONLY;
    // 当 {@code null} 作为源参数值传递给此映射器的方法时要应用的策略。
    NullValueMappingStrategy nullValueMappingStrategy() default NullValueMappingStrategy.RETURN_NULL;
    // 当 {@code null} 作为源参数值传递给 {@link IterableMapping} 时应用的策略
    NullValueMappingStrategy nullValueIterableMappingStrategy() default NullValueMappingStrategy.RETURN_NULL;
    //  当 {@code null} 作为源参数值传递给 {@link MapMapping} 时应用的策略
    NullValueMappingStrategy nullValueMapMappingStrategy() default NullValueMappingStrategy.RETURN_NULL;
    // 当源属性为 {@code null} 或不存在时应用的策略。
    NullValuePropertyMappingStrategy nullValuePropertyMappingStrategy() default NullValuePropertyMappingStrategy.SET_TO_NULL;
    //  用于在接口中应用原型方法的方法级配置注解的策略
    MappingInheritanceStrategy mappingInheritanceStrategy() default MappingInheritanceStrategy.EXPLICIT;
    // 确定何时对 bean 映射的源属性值进行空检查。
    NullValueCheckStrategy nullValueCheckStrategy() default NullValueCheckStrategy.ON_IMPLICIT_CONVERSION;
    // 确定在使用 {@link SubclassMapping} 时如何处理超类的缺失实现。
    SubclassExhaustiveStrategy subclassExhaustiveStrategy() default SubclassExhaustiveStrategy.COMPILE_ERROR;
    //  确定是使用字段注入还是构造函数注入
    InjectionStrategy injectionStrategy() default InjectionStrategy.FIELD;
    // 是否禁用自动生成子映射方法
    boolean disableSubMappingMethodsGeneration() default false;
    // 构建器信息
    Builder builder() default @Builder;
    // 允许详细控制映射过程。
    Class<? extends Annotation> mappingControl() default MappingControl.class;
    // 如果没有与枚举匹配的映射,则生成的代码应抛出异常。
    Class<? extends Exception> unexpectedValueMappingException() default IllegalArgumentException.class;
    // 指示是否应禁止在 {@code @Generated} 注释中添加时间戳的标志。
    boolean suppressTimestampInGenerated() default false;
}

@Mapping

@Mapping 用于配置属性或枚举常量的映射关系。

public @interface Mapping {
    // JavaBeans 规范定义的目标帝乡配置属性的名称
    String target();
    // 用于此映射的源
    String source() default "";
    // 可被 {@link SimpleDateFormat} 处理的日期格式字符串。
    String dateFormat() default "";
    //  可被 {@link DecimalFormat} 处理的十进制格式字符串。
    String numberFormat() default "";
    // 一个常量 {@link String} 将基于它来设置指定的目标属性。
    String constant() default "";
    // 一个表达式 {@link String} 将基于它来设置指定的目标属性。
    String expression() default "";
    // 一个 defaultExpression {@link String},基于它来设置指定的目标属性, 当且仅当指定的源属性为空时。
    String defaultExpression() default "";
    // 通过 {@link #target()} 指定的属性是否应该被生成的映射方法忽略。
    boolean ignore() default false;
    // 可以指定限定符以帮助选择合适的映射器。
    Class<? extends Annotation>[] qualifiedBy() default {};
    // 一个或多个限定符名称
    String[] qualifiedByName() default {};
    // 指定在多个映射方法符合条件时要使用的映射方法的结果类型。
    Class<?> resultType() default void.class;
    // 映射属性的依赖关系
    String[] dependsOn() default {};
    // 在源属性为 {@code null} 的情况下设置的默认值。
    String defaultValue() default "";
    // 确定何时对 bean 映射的源属性值进行空检查。
    NullValueCheckStrategy nullValueCheckStrategy() default NullValueCheckStrategy.ON_IMPLICIT_CONVERSION;
    //  {@code null} 作为源属性值或源属性传递时应用的策略
    NullValuePropertyMappingStrategy nullValuePropertyMappingStrategy() default NullValuePropertyMappingStrategy.SET_TO_NULL;
}

@Mappings

@Mappings 用于声明多个@Mapping。

public @interface Mappings {
    Mapping[] value();
}

@BeforeMapping @AfterMapping

@BeforeMapping@AfterMapping 标记在映射方法开始或结束后时需要调用的方法,也就是可以在映射开始、结束后调用。
可以在映射前后做一些自定义操作,类似AOP中的切面。

@BeanMapping

@BeanMapping 配置两种bean类型之间的映射。

public @interface BeanMapping {
    //  指定在多个工厂方法符合条件时使用的工厂方法的结果类型,
    Class<?> resultType() default void.class;
    // 指定限定符以帮助选择合适的工厂方法
    Class<? extends Annotation>[] qualifiedBy() default {};
    // 使用限定符名称查找
    String[] qualifiedByName() default {};
    // 当 {@code null} 作为源值传递给此映射的方法时要应用的策略。
    NullValueMappingStrategy nullValueMappingStrategy() default NullValueMappingStrategy.RETURN_NULL;
    // {@code null} 作为源属性值或源属性传递时应用的策略
    NullValuePropertyMappingStrategy nullValuePropertyMappingStrategy() default NullValuePropertyMappingStrategy.SET_TO_NULL;
    // 如何做空检查策略
    NullValueCheckStrategy nullValueCheckStrategy() default NullValueCheckStrategy.ON_IMPLICIT_CONVERSION;
    // 确定在使用 {@link SubclassMapping} 时如何处理超类缺失。
    SubclassExhaustiveStrategy subclassExhaustiveStrategy() default SubclassExhaustiveStrategy.COMPILE_ERROR;
    // 默认忽略所有映射。所有映射都必须手动定义。不会发生自动映射。
    boolean ignoreByDefault() default false;
    // 未映射的源属性将被忽略。
    String[] ignoreUnmappedSourceProperties() default {};
    // 如何报告映射的目标类型的未映射属性。
    ReportingPolicy unmappedTargetPolicy() default ReportingPolicy.WARN;
    // 指定构建者
    Builder builder() default @Builder;
    //  允许详细控制映射过程。
    Class<? extends Annotation> mappingControl() default MappingControl.class;
}

@InheritConfiguration @InheritInverseConfiguration

inherit 是继承的意思,Inverse 是反转的意思。
@InheritConfiguration 可以继承其他映射方法上的配置(@Mapping@IterableMappingMapper#config() 等方式上的配置)。

public @interface InheritConfiguration {

    /**
     * 要从中继承映射的映射方法的名称
     */
    String name() default "";
}

@InheritInverseConfiguration 是反向隐射继承,也就是对继承的配置进行逆向映射。

public @interface InheritInverseConfiguration{

    /**
     * 要从中继承映射的映射方法的名称
     */
    String name() default "";
}

@IterableMapping

@IterableMapping 用于配置两个几个类似类型之间的映射,例如 {@code List<String>}{@code List<Date>}

public @interface IterableMapping {
    // 可被 {@link SimpleDateFormat} 处理的日期格式字符串。
    String dateFormat() default "";
    // 可被 {@link DecimalFormat} 处理的十进制格式字符串。
    String numberFormat() default "";
    // 可以指定限定符以帮助选择合适的映射器。
    Class<? extends Annotation>[] qualifiedBy() default {};
    // 一个或多个限定符名称
    String[] qualifiedByName() default {};
    // 指定要在映射方法的结果中使用的元素的类型,以防多重映射方法符合条件。
    Class<?> elementTargetType() default void.class;
    //  当 {@code null} 作为源值传递给此可迭代映射时要应用的策略。
    NullValueMappingStrategy nullValueMappingStrategy() default NullValueMappingStrategy.RETURN_NULL;
    // 允许详细控制映射过程
    Class<? extends Annotation> elementMappingControl() default MappingControl.class;
}

@ValueMapping @ValueMappings

@ValueMapping 配置源常量值到目标常量值的映射,支持枚举到枚举,@ValueMappings 就是可以写多个 @ValueMapping

public @interface ValueMapping {
    String source();

    String target();
}
public @interface ValueMappings {
    ValueMapping[] value();
}

@SubclassMapping @SubclassMappings

@ValueMapping 配置映射子类,也就是参数和目标对象为父类时,执行其子类的映射关系,@SubclassMappings 就是可以写多个@SubclassMapping

public @interface SubclassMapping {
    //  要映射的子类
    Class<?> source();
    // 要映射到的子类
    Class<?> target();
}
public @interface SubclassMappings {
    SubclassMapping[] value();
}

@TargetType

@TargetType 可以在自定义映射方法的参数中声明目标对象的类型。比如返回类型为泛型,这个时候可以在参数中指定目标的类型。
不能将多个参数声明为 {@code TargetType} ,并且该参数必须是 {@link Class} 类型或者它的超类型。

public class EntityFactory {
public <T extends BaseEntity> T createEntity(@TargetType Class entityClass) {
     return // ... custom factory logic
  }
 }

@Named

@Named 可以给映射方法取名,然后通过限定符直接使用名称绑定映射方法。

public @interface Named {
    // 限定注解元素的名称
    String value();
}

@MapperConfig

将类或接口标记为配置,允许在多个映射器类之间共享通用配置。

public @interface MapperConfig {
    // 使用其他的映射器
    Class<?>[] uses() default {};
    // 将类import 到生成的实现类中
    // 可以使用 {@link mapping#expression()}表达式中引用这些类型,{@link Mapping#defaultExpression()}使用他们简单的名字,而不是完全限定的名字。
    Class<?>[] imports() default {};
    // 映射的源类型的存在未映射属性应该如何报告
    ReportingPolicy unmappedSourcePolicy() default ReportingPolicy.IGNORE;
    // 映射的目标类型存在未映射属性应该如何映射
    ReportingPolicy unmappedTargetPolicy() default ReportingPolicy.WARN;
    // 存在精度损失,如何报告
    ReportingPolicy typeConversionPolicy() default ReportingPolicy.IGNORE;
    // 映射器组件模型
    String componentModel() default "default";
    // 指定实现类的名称。默认后缀为Impl
    String implementationName() default "<CLASS_NAME>Impl";
    // 指定包名
    String implementationPackage() default "<PACKAGE_NAME>";
    // 集合类型属性的值时应用的策略。
    CollectionMappingStrategy collectionMappingStrategy() default CollectionMappingStrategy.ACCESSOR_ONLY;
    // 当 {@code null} 作为源参数值传递给此映射器的方法时要应用的策略。
    NullValueMappingStrategy nullValueMappingStrategy() default NullValueMappingStrategy.RETURN_NULL;
    // 当 {@code null} 作为源参数值传递给 {@link IterableMapping} 时应用的策略
    NullValueMappingStrategy nullValueIterableMappingStrategy() default NullValueMappingStrategy.RETURN_NULL;
    //  当 {@code null} 作为源参数值传递给 {@link MapMapping} 时应用的策略
    NullValueMappingStrategy nullValueMapMappingStrategy() default NullValueMappingStrategy.RETURN_NULL;
    // 当源属性为 {@code null} 或不存在时应用的策略。
    NullValuePropertyMappingStrategy nullValuePropertyMappingStrategy() default NullValuePropertyMappingStrategy.SET_TO_NULL;
    //  用于在接口中应用原型方法的方法级配置注解的策略
    MappingInheritanceStrategy mappingInheritanceStrategy() default MappingInheritanceStrategy.EXPLICIT;
    // 确定何时对 bean 映射的源属性值进行空检查。
    NullValueCheckStrategy nullValueCheckStrategy() default NullValueCheckStrategy.ON_IMPLICIT_CONVERSION;
    // 确定在使用 {@link SubclassMapping} 时如何处理超类的缺失实现。
    SubclassExhaustiveStrategy subclassExhaustiveStrategy() default SubclassExhaustiveStrategy.COMPILE_ERROR;
    //  确定是使用字段注入还是构造函数注入
    InjectionStrategy injectionStrategy() default InjectionStrategy.FIELD;
    // 是否禁用自动生成子映射方法
    boolean disableSubMappingMethodsGeneration() default false;
    // 构建器信息
    Builder builder() default @Builder;
    // 允许详细控制映射过程。
    Class<? extends Annotation> mappingControl() default MappingControl.class;
    // 如果没有与枚举匹配的映射,则生成的代码应抛出异常。
    Class<? extends Exception> unexpectedValueMappingException() default IllegalArgumentException.class;
    // 指示是否应禁止在 {@code @Generated} 注释中添加时间戳的标志。
    boolean suppressTimestampInGenerated() default false;
}

@EnumMapping

@EnumMapping 配置两种枚举类型之间的映射。

public @interface EnumMapping {
    // 指定应该用于枚举之间的隐式映射的名称转换策略。
    String nameTransformationStrategy() default "";
    // 应该在适当的名称转换策略上传递的配置。
    String configuration() default "";
    // 应该在生成的代码中使用的异常
    Class<? extends Exception> unexpectedValueMappingException() default IllegalArgumentException.class;
}

@DecoratedWith

Decorated 是装饰的意思, @DecoratedWith 指定要应用于生成的映射器的装饰器。

public @interface DecoratedWith {
    // 装饰器类型。必须是一个抽象类。
    Class<?> value();
}

@Context

将方法的参数标记为映射上下文。此类参数传递给其他映射方法。

@Condition

@Condition 将方法标记为检查方法,以检查 bean 中的属性是否存在等检查。检查方法必须返回 {@code boolean}

public class PresenceCheckUtils {
 
    @Condition
    public static boolean isNotEmpty(String value) {
       return value != null && !value.isEmpty();
    }
  }

@DeepClone

将源类型克隆到目标类型(假设源和目标属于同一类型)。

@MappingControl @MappingControls

@MappingControl 控制源和目标之间的映射方式。

@Retention(RetentionPolicy.CLASS)
@Repeatable(MappingControls.class)
@Target({ElementType.ANNOTATION_TYPE})
@MappingControls({@MappingControl(MappingControl.Use.DIRECT), @MappingControl(MappingControl.Use.BUILT_IN_CONVERSION), @MappingControl(MappingControl.Use.MAPPING_METHOD), @MappingControl(MappingControl.Use.COMPLEX_MAPPING)})
public @interface MappingControl {
    MappingControl.Use value();

    public static enum Use {
           /**
         * 控制映射,允许从源类型到目标类型的类型转换
         * <p>
         * Java 通常直接支持类型转换。“toString()”就是这样一个例子,
         * 它允许将例如 {@link java.lang.Number} 类型映射到 {@link java.lang.String}。
         * <p>
         * 请参阅 MapStruct 指南了解更多信息。
         *
         * @从 1.4 开始
         */
        BUILT_IN_CONVERSION,
          /**
         * 控制从源类型到目标类型的映射,允许通过调用进行映射:
         * <ol>
         * <li>类型转换,传入映射方法</li>
         * <li>映射方法,传入类型转换</li>
         * <li>一个映射方法传入另一个映射方法</li>
         * </ol>
         *
         * @从 1.4 开始
         */
        COMPLEX_MAPPING,
        // 如果源类型和目标类型是相同的类型,MapStruct 将不会执行不再有任何映射,并将目标直接分配给源。
        // 一个例外是来自包 {@code java} 的类型,它们将始终直接映射。
        DIRECT,
        // 映射方法可以是自定义引用的映射方法,也可以是内置的 MapStruct映射方法。
        MAPPING_METHOD;

        private Use() {
        }
    }
}

@NoComplexMapping

禁用复杂映射,必须使用方法或内置转换方式构成的映射。

标签:String,映射,MapStruct,汇总,public,default,link,注解,Class
From: https://www.cnblogs.com/reroyalup/p/18245177

相关文章

  • 线程池的使用:批量导入、数据汇总、异步保存搜索记录
    文章目录1、场景一:MySQL批量导入数据到ES1.1CountDownLatch1.2流程图1.3代码实现1.4效果2、场景二:数据汇总2.1流程图2.2代码实现3、场景三:异步调用3.1需求3.2代码实现1、场景一:MySQL批量导入数据到ES场景:需要将库里的1000万左右的数据量,导入到ES索引库中......
  • 苹果电脑卸载软件干净又彻底的方法汇总
    在数字化蓬勃发展的当今时代,电脑软件已逐渐演化为我们日常工作和休闲娱乐活动中不可或缺的重要工具。然而,随着时间的推移,某些软件可能会逐渐无法跟上用户日益增长的使用需求,或者用户可能会转而寻求更高效、更先进的工具作为替代。在这种情况下,卸载不再需要的软件就变得尤为重要......
  • yum失败原因汇总
    @目录概要情形一报错解答情形二报错解答小结概要怎么说呢,这个经历不好截图追溯了,只能通过回忆记录了。之前看了一个教程说把docker的所有镜像源换下,执行了一大串以sed开头的命令语句,接着就不能执行yum的相关操作了,yumupdate也不行,实在没办法了只能找售后工程师帮我看看了情形......
  • mysql常用的聚合函数---汇总数据
    此篇文章内容均来自与mysql必知必会教材,后期有衍生会继续更新、补充知识体系结构文章目录AGV()count()根据需求可以进行组合处理max()min()max()、min()、avg()组合使用汇总数据AGV()AVG():1、单列使用AVG();2、多列求平均值的情况下必须使用多个agv()语法:selectav......
  • [20240607]PL/SQL中sql语句的注解.txt
    [20240607]PL/SQL中sql语句的注解.txt--//别人测试遇到的问题,重复测试说明问题.1.环境:SCOTT@test01p>@verBANNER                                                                           ......
  • 探索Java的奥秘:网络编程、反射与注解的深度解析
    Java,作为一门功能强大的编程语言,在网络编程、反射和注解方面提供了丰富的支持和灵活的应用。本文将深入探讨这些概念,并通过实际例子来加深理解。一、Java网络编程1.1网络编程基础网络编程是Java语言的一大亮点,它允许我们创建能够通过网络进行通信的程序。Java提供了java......
  • 2024年全国高考作文题目汇总
    2024全国高考作文题目汇总新课标I卷阅读下面的材料,根据要求写作。(60分)随着互联网的普及、人工智能的应用,越来越多的问题能很快得到答案。那么,我们的问题是否会越来越少?以上材料引发了你怎样的联想和思考?请写一篇文章。要求:选准角度,确定立意,明确文体,自拟标题;不要套作,不得抄......
  • 巧妙使用mapstruct来解决数据库entiy到实体dto的映射关系
    1.引入mapstruct<dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId></dependency><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-p......
  • AIGC绘画设计基础:全网最全Midjourney出图关键词咒语汇总
    Midjourney是第一个快速生成AI制图并开放予大众申请使用的平台。Midjourney生成的作品往往带有电脑生成的痕迹,比较不会被当成假新闻素材,但对色情、血腥、暴力创作题材的审核还不够精准。例如,输入“一棵长着立方体形桃子的大树”,就会生成四张不同图像供选择。一、什么是midjo......
  • 二叉树相关算法题汇总-go语言实现
    总结先序中序后序遍历就能解决一些算法题。层次遍历使用队列。从左子树、右子树获取答案,然后结合根节点来计算答案。前缀树,比Hashset更稳定。O(1),只不过占内存。trie树。递归。递归,递归。到叶子节点收集答案。然后移除路径。packagemainimport( "fmt" "math......