技术派Bean拷贝之MapStruct
选中新版正文中的对应文字,然后点“定位到这里”。
大家好,我是二哥呀。今天由我来给大家讲一下 MapStruct 在技术派中的应用。简单来说,MapStruct 就是一个 Java Bean 的映射器,我们只需要在一个 XXXStructMapper 的接口中定义好方法,MapStruct 就会在编译的时候生成相应的实现类,这个实现类中包含了具体的映射代码,极大地提高了我们编码的效率,省去了大量的模板代码。
传统样板代码的困扰
假如没有使用 MapStruct 的话,当我们需要把 DO 对象转成一个 DTO 对象时,我们需要这样做。
public static ArticleDTO toDto(ArticleDO articleDO) {
if (articleDO == null) {
return null;
}
ArticleDTO articleDTO = new ArticleDTO();
articleDTO.setAuthor(articleDO.getUserId());
articleDTO.setArticleId(articleDO.getId());
articleDTO.setArticleType(articleDO.getArticleType());
articleDTO.setTitle(articleDO.getTitle());
articleDTO.setShortTitle(articleDO.getShortTitle());
articleDTO.setSummary(articleDO.getSummary());
articleDTO.setCover(articleDO.getPicture());
articleDTO.setSourceType(SourceTypeEnum.formCode(articleDO.getSource()).getDesc());
articleDTO.setSourceUrl(articleDO.getSourceUrl());
articleDTO.setStatus(articleDO.getStatus());
articleDTO.setCreateTime(articleDO.getCreateTime().getTime());
articleDTO.setLastUpdateTime(articleDO.getUpdateTime().getTime());
articleDTO.setOfficalStat(articleDO.getOfficalStat());
articleDTO.setToppingStat(articleDO.getToppingStat());
articleDTO.setCreamStat(articleDO.getCreamStat());
// 设置类目id
articleDTO.setCategory(new CategoryDTO(articleDO.getCategoryId(), null));
return articleDTO;
}
如果是 List 的时候,还需要进行遍历。
public static List toArticleDtoList(List articleDOS) {
return articleDOS.stream().map(ArticleConverter::toDto).collect(Collectors.toList());
}
这样的样板代码写多了,你会感觉毫无价值,自己就像一个复制粘贴的 CRUD Boy。
那如果使用 MapStruct 呢?
@Mapper
public interface ArticleStructMapper {
ArticleStructMapper INSTANCE = Mappers.getMapper(ArticleStructMapper.class );
ArticleDTO toDTO(ArticleDO do);
}
定义了一个接口 ArticleStructMapper,该接口的主要作用是将 ArticleDO 对象转换为 ArticleDTO 对象。
让我们一步步地分析代码:
@Mapper:
这是 MapStruct 的核心注解之一。它标记了这个接口为一个映射器,并告诉 MapStruct 的注解处理器在编译时为此接口生成实现。
- INSTANCE 常量:
ArticleStructMapper INSTANCE...未能定位到原文的划线
已加入星球,可直接知识星球授权登录
二哥编程星球目前包含:
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
回复