Title

使用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>
posted @   快乐小洋人  阅读(182)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示