介绍
官网:https://mapstruct.org/
一个用于在Java Bean
之间转换的代码生成工具。它通过注解和代码生成技术,简化了对象之间的映射,使开发者能够更方便地进行对象之间的转换,而不需要手动编写繁琐的映射代码。
使用
引入MapStruct依赖
在Maven项目中,可以通过以下方式引入MapStruct的依赖:
<!--MapStruct 依赖-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.1.Final</version>
</dependency>
<!--MapStruct 注解处理器-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.1.Final</version>
</dependency>
创建实例对象
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Source {
private String sourceId;
private String sourceName;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Target {
private String targetId;
private String targetName;
}
定义MapStruct映射接口
@Mapper
public interface MapStructMapper {
MapStructMapper INSTANCE = Mappers.getMapper(MapStructMapper.class);
@Mappings({
@Mapping(source = "sourceId", target = "targetId"),
@Mapping(source = "sourceName", target = "targetName")
})
Target sourceToTarget(Source source);
}
映射测试
在代码中使用MapStructMapper.INSTANCE.sourceToTarget(source)方法将Source对象转换为Target对象。
public class Main {
public static void main(String[] args) {
Source source = new Source("666", "奇遇少年");
Target target = MapStructMapper.INSTANCE.sourceToTarget(source);
System.out.println(target.getTargetId()); //666
System.out.println(target.getTargetName()); //奇遇少年
}
}
ignore忽悠字段
@Mapper
public interface MapStructMapper {
MapStructMapper INSTANCE = Mappers.getMapper(MapStructMapper.class);
//在映射规则中使用ignore=true忽略某个字段
@Mappings({
@Mapping(source = "sourceIgnore", target = "targetIgnore", ignore = true)
})
Target sourceToTarget(Source source);
}
日期格式转换
//定义MapStruct映射接口
@Mapper
public interface MapStructMapper {
MapStructMapper INSTANCE = Mappers.getMapper(MapStructMapper.class);
@Mappings({
@Mapping(source = "sourceDate", target = "targetDate",dateFormat = "yyyy-MM-dd")
})
Target sourceToTarget(Source source);
}
@BeanMapping(ignoreByDefault=true)
配置忽略mapstruct的默认映射行为,只映射那些配置了@Mapping的属性
//定义MapStruct映射接口
@Mapper
public interface MapStructMapper {
MapStructMapper INSTANCE = Mappers.getMapper(MapStructMapper.class);
@BeanMapping(ignoreByDefault=true)
@Mapping(source = "sourceName", target = "targetName")
Target sourceToTarget(Source source);
}
结语:
MapStruct的优点非常明显,它可以帮助开发者减少重复、繁琐的对象属性拷贝代码,使得代码更为简洁和易于维护。同时,由于使用了注解处理器,所有的映射逻辑都在编译时就会生成,这意味着性能上不会有反射调用带来的开销,映射执行速度快。
可能出现的错误:http://t.csdnimg.cn/kBdxA