MapSturct 简单应用

191 阅读1分钟

简介

MapSturct 是一个生成类型安全, 高性能且无依赖的 JavaBean 映射代码的注解处理器

在Java中,有多种方式来处理这些属性拷贝:

  1. 直接编码,用代码get\set
  2. 使用各种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…

参考文章

juejin.cn/post/699201… juejin.cn/post/693752…