简介
MapSturct 是一个生成类型安全, 高性能且无依赖的 JavaBean 映射代码的注解处理器
在Java中,有多种方式来处理这些属性拷贝:
- 直接
硬编码,用代码get\set - 使用各种
BeanUtils,通过反射完成赋值
效率最快的当然是手写的get\set,当然开发效率也是最差,用BeanUtils开发效率最高但是性能相对会差一些.而MapStruct通过编译器编译生成常规的方法,我们通过写接口和注解就可以手动帮我们生成get\set代码,效率和get\set一样
示例
首先引入MapStruct的依赖
Maven:
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.2.Final</version>
</dependency>
复制代码
在Plugins加上:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<compilerVersion>${maven.compiler.source}</compilerVersion>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<!-- javac编译器需要指定-parameters参数以后才会把参数名信息写入到字节码中,然后才能被反射机制读取 -->
<compilerArgument>-parameters</compilerArgument>
<annotationProcessorPaths>
<!-- Lombok 在编译时会通过这个插件生成代码 -->
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
现有两个实体类
@Data
public class SysUser {
/**
* 姓名
*/
private String name;
/**
* 工号
*/
private String code;
/**
* 密码
*/
private String password;
/**
* 手机
*/
private String phone;
}
@Data
public class SysUserVo implements Serializable {
private static final long serialVersionUID = 2311018619982779751L;
/**
* id
*/
private Long id;
/**
* 姓名
*/
private String name;
/**
* 工号
*/
private String code;
/**
* 手机
*/
private String phone;
}
@Mapper
public interface SysUserConverter {
SysUserConverter INSTANCE = Mappers.getMapper(SysUserConverter.class);
/**
* 实体转vo
*
* @param user 实体
* @return vo
*/
@Mapping(target = "id", ignore = true)
SysUserVo e2v(SysUser user);
}
更多更复杂的用法可以参考官方示例:mapstruct.org/documentati…