经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
MapStruct - 注解汇总
来源:cnblogs  作者:我是我最后的目击者  时间:2024/6/13 8:58:54  对本文有异议

@Mapper

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

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

@Mapping

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

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

@Mappings

@Mappings 用于声明多个@Mapping。

  1. public @interface Mappings {
  2. Mapping[] value();
  3. }

@BeforeMapping @AfterMapping

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

@BeanMapping

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

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

@InheritConfiguration @InheritInverseConfiguration

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

  1. public @interface InheritConfiguration {
  2. /**
  3. * 要从中继承映射的映射方法的名称
  4. */
  5. String name() default "";
  6. }

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

  1. public @interface InheritInverseConfiguration{
  2. /**
  3. * 要从中继承映射的映射方法的名称
  4. */
  5. String name() default "";
  6. }

@IterableMapping

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

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

@ValueMapping @ValueMappings

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

  1. public @interface ValueMapping {
  2. String source();
  3. String target();
  4. }
  1. public @interface ValueMappings {
  2. ValueMapping[] value();
  3. }

@SubclassMapping @SubclassMappings

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

  1. public @interface SubclassMapping {
  2. // 要映射的子类
  3. Class<?> source();
  4. // 要映射到的子类
  5. Class<?> target();
  6. }
  1. public @interface SubclassMappings {
  2. SubclassMapping[] value();
  3. }

@TargetType

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

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

@Named

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

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

@MapperConfig

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

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

@EnumMapping

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

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

@DecoratedWith

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

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

@Context

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

@Condition

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

  1. public class PresenceCheckUtils {
  2. @Condition
  3. public static boolean isNotEmpty(String value) {
  4. return value != null && !value.isEmpty();
  5. }
  6. }

@DeepClone

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

@MappingControl @MappingControls

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

  1. @Retention(RetentionPolicy.CLASS)
  2. @Repeatable(MappingControls.class)
  3. @Target({ElementType.ANNOTATION_TYPE})
  4. @MappingControls({@MappingControl(MappingControl.Use.DIRECT), @MappingControl(MappingControl.Use.BUILT_IN_CONVERSION), @MappingControl(MappingControl.Use.MAPPING_METHOD), @MappingControl(MappingControl.Use.COMPLEX_MAPPING)})
  5. public @interface MappingControl {
  6. MappingControl.Use value();
  7. public static enum Use {
  8. /**
  9. * 控制映射,允许从源类型到目标类型的类型转换
  10. * <p>
  11. * Java 通常直接支持类型转换。“toString()”就是这样一个例子,
  12. * 它允许将例如 {@link java.lang.Number} 类型映射到 {@link java.lang.String}。
  13. * <p>
  14. * 请参阅 MapStruct 指南了解更多信息。
  15. *
  16. * @从 1.4 开始
  17. */
  18. BUILT_IN_CONVERSION,
  19. /**
  20. * 控制从源类型到目标类型的映射,允许通过调用进行映射:
  21. * <ol>
  22. * <li>类型转换,传入映射方法</li>
  23. * <li>映射方法,传入类型转换</li>
  24. * <li>一个映射方法传入另一个映射方法</li>
  25. * </ol>
  26. *
  27. * @从 1.4 开始
  28. */
  29. COMPLEX_MAPPING,
  30. // 如果源类型和目标类型是相同的类型,MapStruct 将不会执行不再有任何映射,并将目标直接分配给源。
  31. // 一个例外是来自包 {@code java} 的类型,它们将始终直接映射。
  32. DIRECT,
  33. // 映射方法可以是自定义引用的映射方法,也可以是内置的 MapStruct映射方法。
  34. MAPPING_METHOD;
  35. private Use() {
  36. }
  37. }
  38. }

@NoComplexMapping

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

原文链接:https://www.cnblogs.com/reroyalup/p/18245177

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号