使用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>
标签:
使用MapStruct
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能