使用MapStruct

区别

BeanUtils

使用 spring 的 BeanUtils.copyProperties 来进行 JavaBean 的转换,内部使用的是反射机制,会影响一部分性能。

MapStruct

使用 MapStruct 进行 JavaBean 的转换,MapStruct 使用纯 Java 方法代替 Java 的反射机制快速执行,效率更快。

使用

导包

                <org.mapstruct.version>1.3.1.Final</org.mapstruct.version>

                <dependency>
			<groupId>org.mapstruct</groupId>
			<artifactId>mapstruct-jdk8</artifactId>
			<version>${org.mapstruct.version}</version>
		</dependency>
		<dependency>
			<groupId>org.mapstruct</groupId>
			<artifactId>mapstruct-processor</artifactId>
			<version>${org.mapstruct.version}</version>
		</dependency>

编写转换接口

package com.zl.util;

import com.zl.vo.A;
import com.zl.vo.B;
import org.mapstruct.Mapper;
import org.mapstruct.NullValueMappingStrategy;
import org.mapstruct.factory.Mappers;

/**
 * Beans处理工具
 * @author z
 */
@Mapper(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)
public interface BeansUtil {
    BeansUtil INSTANCES = Mappers.getMapper(BeansUtil.class);

    /**
     * 复制
     * @Mapping 用来定义属性复制规则 source 指定源对象属性 target指定目标对象属性
     *
     * @param source bean源
     * @return 目标Bean
     */
    @Mappings({
            @Mapping(source = "id", target = "userId"),
            @Mapping(source = "username", target = "name"),
            @Mapping(source = "role.roleName", target = "roleName")
    })
    B aToB(A source);

    /**
     * 复制
     * @param source bean源
     * @param target 目标bean
     */
    void toCopyBean(A source,@MappingTarget A target);
}

使用

BeansUtil.INSTANCES.toCopyBean(a,b);

遇到的问题

Couldn’t retrieve @Mapper annotation

1、jar包问题(参考版本 1.3.1.Final)
2、集成swagger2,包冲突

		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>${swagger.version}</version>
			<exclusions>
				<exclusion>
					<groupId>org.mapstruct</groupId>
					<artifactId>mapstruct</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
上一篇:Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 2 字节的 UTF-8 序列


下一篇:java4 -- SpringBoot定时任务调度