1 maven 依赖
<properties>
<org.mapstruct.version>1.4.2.Final</org.mapstruct.version>
</properties>
<!-- MapStruct dependency -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<!-- MapStruct processor -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</path>
<!-- This is needed when using Lombok 1.18.16 and above -->
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
2 pojo,vo等
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class CarType {
private String type;
}
public enum ColorEnum {
RED,
BLUE,
GREEN
}
public enum YanseEnum {
RED,
BLUE,
GREEN
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Qiche {
private String name;
private int price;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
private CarType carType;
private ColorEnum color;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class QicheVo {
private String mingcheng;
private Long price;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
private String carType;
private YanseEnum yanse;
}
3 核心类,映射处理逻辑,如将Qiche类转为QicheVo类,并属性填充
import com.example.demo_zha_2.pojo.Qiche;
import com.example.demo_zha_2.pojo.QicheVo;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface QicheMapstruct {
QicheMapstruct INSTANCE = Mappers.getMapper(QicheMapstruct.class);
@Mappings(
{
@Mapping(source = "name", target = "mingcheng"),
@Mapping(source = "carType.type", target = "carType"),
@Mapping(source = "createTime", target = "createTime", dateFormat = "yyyy-MM-dd HH:mm:ss"),
@Mapping(source = "color", target = "yanse")
}
)
QicheVo zhuan_1(Qiche p);
List<QicheVo> zhuan_2(List<Qiche> students);
}
4 测试,将Qiche类转为QicheVo类,并属性填充
import com.example.demo_zha_2.jiekou.QicheMapstruct;
import com.example.demo_zha_2.pojo.Qiche;
import com.example.demo_zha_2.pojo.QicheVo;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/abc")
public class controller_Controller_1 {
QicheMapstruct qicheMapstruct = QicheMapstruct.INSTANCE;
@RequestMapping("/test_1")
public Object test_1(@RequestBody Qiche qiche) {
QicheVo qicheVo = qicheMapstruct.zhuan_1(qiche);
return qicheVo;
}
@RequestMapping("/test_2")
public Object test_2(@RequestBody List<Qiche> qicheList) {
List<QicheVo> qicheVoList = qicheMapstruct.zhuan_2(qicheList);
return qicheVoList;
}
}
5 观察target目录下生成的class,就知道底层实现原理了