# mapstruct-use
**Repository Path**: EverSpring007/mapstruct-use
## Basic Information
- **Project Name**: mapstruct-use
- **Description**: No description available
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2020-09-16
- **Last Updated**: 2024-09-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 环境
IDEA 2020.1.4
springboot 2.3.3
mapstruct 1.3.1.Final
lombok 1.18.12
IDEA插件 MapStruct Support,推荐使用,支持跳转到实现、注解字段名变化后提示
# 遇到的问题
### 编译问题
1. 没有生成mapping代码
```$xslt
ClassNotFoundException: Cannot find implementation for com.everspring.mapstruct.use.mapping.OrderMapping
```
**解决方法:** 引入mapstruct-processor,这个是解决实现类没有生成的
```xml
org.mapstruct
mapstruct-processor
${mapstruct.version}
```
2. 由于加入了lombok的@Builder导致的编译报错
编译报错
```$xslt
Error:(17, 13) java: com.everspring.mapstruct.use.model.OrderVo does not have an accessible parameterless constructor.
```
编译报错
```$xslt
Error:(18, 1) java: 无法将类 com.everspring.mapstruct.use.model.Order中的构造器 Order应用到给定类型;
需要: 没有参数
找到: java.lang.Long,java.math.BigDecimal,java.lang.String,java.util.Date,java.util.List
原因: 实际参数列表和形式参数列表长度不同
```
**解决方法**:
加入lombok的@NoArgsConstructor、@AllArgsConstructor,如果不用@Builder就不回有问题
### 代码问题
1. 属性中有集合,集合类的属性需要做映射,比如案例中orderDetailList的id要映射成orderDetailVoList的orderDetailId
**解决方法**:
对集合类中的对象单独写一个映射,然后在需要转换的最外层映射@Mappers中使用use引用,如案例中单独实现了OrderDetailMapping,再在最外层映射引用
```$xslt
@Mapper(uses = {OrderDetailMapping.class})
```
# 参考资料
https://yq.aliyun.com/articles/591623?do=login&accounttraceid=6d6185194eb0408c9a6a47d4d59e9d9cfqyh