是什么
MapStruct是一个Java注解处理器,用于生成类型安全的Bean映射代码。它使得Java开发人员能够快速方便地实现Java Bean之间的映射,而不需要手动编写繁琐的转换代码。MapStruct使用注解和代码生成技术,通过根据Java Bean的属性名称和类型自动生成类型安全的映射代码,从而提高了开发人员的生产力,并减少了开发时间。
MapStruct支持的源和目标类型包括Java Bean、Map、数组和集合等。它还支持自定义映射方法,以便开发人员可以根据自己的需求进行更高级的映射操作。MapStruct还可以与Spring、CDI和其他依赖注入框架集成,使开发人员可以更轻松地在项目中使用它。
demo
public class SourceBean {
private String name;
private int age;
// 构造方法、getter和setter
}
public class TargetBean {
private String name;
private Integer age;
// 构造方法、getter和setter
}
@Mapper
public interface BeanMapper {
BeanMapper INSTANCE = Mappers.getMapper(BeanMapper.class);
TargetBean sourceToTarget(SourceBean source);
SourceBean targetToSource(TargetBean target);
}
SourceBean source = new SourceBean("John", 25);
TargetBean target = BeanMapper.INSTANCE.sourceToTarget(source);
System.out.println(target.getName()); // 输出 "John"
System.out.println(target.getAge()); // 输出 25
映射规则
-
MapStruct会自动查找源和目标类型之间的同名属性,并将它们进行映射。
-
如果源和目标类型之间存在属性名称不同的情况,可以使用@Mapping注解来指定映射关系。例如:
@Mapper
public interface BeanMapper {
@Mapping(source = "sourceName", target = "targetName")
TargetBean sourceToTarget(SourceBean source);
}
-
如果源和目标类型之间存在属性类型不同的情况,MapStruct会尝试进行自动类型转换。例如,如果源类型的age属性是int类型,而目标类型的age属性是Integer类型,MapStruct会自动将int类型转换为Integer类型。
-
如果源和目标类型之间存在复杂的映射关系,可以使用自定义的映射方法来实现。例如:
@Mapper
public interface BeanMapper {
@Mapping(source = "sourceName", target = "targetName")
@Mapping(source = "source.age", target = "target.age", qualifiedByName = "customMappingMethod")
TargetBean sourceToTarget(SourceBean source);
@Named("customMappingMethod")
public Integer mapAge(int age) {
return age + 1;
}
}