MAVEN
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.6.0</version>
</dependency>
<!-- 对象映射组件 -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>1.6.0</version>
</dependency>
<!-- 对象映射处理器 -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.6.0</version>
</dependency>
编写转换类
package com.beite.beiteblog.admin.convertor;
import com.beite.beiteblog.admin.dto.ResourceAddDTO;
import com.beite.beiteblog.admin.dto.ResourceDTO;
import com.beite.beiteblog.admin.dto.ResourceUpdateDTO;
import com.beite.beiteblog.admin.entity.ResourceEntity;
import com.beite.beiteblog.common.utils.PageUtils;
import org.mapstruct.Builder;
import org.mapstruct.Mapper;
import java.util.List;
/**
* 功能资源路径转换器
* @author beite_he[beite_he@insightfo.cn]
* @author <a href="mailto:beite_he@insightfo.cn">Beite</a>
* @version 1.0
* @date 2022年01月07日 11:19
*/
@Mapper(componentModel = "spring", builder = @Builder)
public interface ResourceConverter {
//dataobject转成DTO
ResourceDTO doToDto(ResourceEntity resourceEntity);
//DTO转成dataobject
ResourceEntity dtoToDo(ResourceDTO resourceDTO);
//ADDDTO转成dataobject
ResourceEntity addDtoToDo(ResourceAddDTO resource);
//UPDATEDTO转成dataobject
ResourceEntity updateDtoToDo(ResourceUpdateDTO resource);
//dataobject list转成DTO list
List<ResourceDTO> doListToDtoList(List<ResourceEntity> resourceEntity);
//DTO list转成dataobject list
List<ResourceEntity> dtoListToDoList(List<ResourceDTO> resourceDTO);
////dataobject page转成DTO page
PageUtils<ResourceDTO> doToDto(PageUtils<ResourceEntity> resourceEntity);
////DTO page转成dataobject page
PageUtils<ResourceEntity> dtoToDo(PageUtils<ResourceDTO> resourceDTO);
}
代码生成不全问题
这个问题我踩了半天坑,一开始一直纠结的是idea中有个注解处理器设置,但是设置了半天没用
解决方法
查看target\generated-sources\annotations下生成的类,发现只创建了一个空对象,没有生成任何set代码。 这里用到了lombok 排查发现,maven引用的时候先引用的mapstruct后lombok,导致mapstruct构建set code的时候,对象的get set方法还没有被lombok生成,导致此问题。 解决办法: 先引用lombok,后mapstruct 或者maven plugin 指定编译顺序。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version> <!-- 确保使用支持 JDK 21 的版本 -->
<configuration>
<source>21</source>
<target>21</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.6.0</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>