MapStruct 2分钟示例
Jihongchang(讨论 | 贡献)2026年1月25日 (日) 04:53的版本
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>untitled</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Lombok 核心依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope> <!-- 关键:仅编译期生效,不打入最终包 -->
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- MapStruct 核心依赖 -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.5.Final</version>
</dependency>
<!-- 编译期注解处理器 -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.5.Final</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
CarType.java
package org.example.common.enums;
public enum CarType {
/**
* 三厢轿车
*/
SEDAN,
/**
* 运动型多用途汽车
*/
SUV,
/**
* 皮卡:驾驶室+开放式货箱
*/
PICKUP
}
Car.java
package org.example.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.example.common.enums.CarType;
@Data
@AllArgsConstructor
public class Car {
private String make;
private int numberOfSeats;
private CarType type;
}
CarDTO.java
package org.example.model.dto;
import lombok.Data;
@Data
public class CarDTO {
/**
* 制造商
*/
private String make;
private int seatCount;
private String type;
}
CarMapper.java
package org.example.converter.mapper;
import org.example.domain.Car;
import org.example.model.dto.CarDTO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface CarMapper {
CarMapper INSTANCE = Mappers.getMapper(CarMapper.class);
@Mapping(source = "numberOfSeats", target = "seatCount")
CarDTO carToCarDTO(Car car);
}
CarMapperTest.java
package org.example.converter.mapper;
import org.example.common.enums.CarType;
import org.example.domain.Car;
import org.example.model.dto.CarDTO;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class CarMapperTest {
@Test
public void test() {
Car car = new Car("宝马", 5, CarType.SEDAN);
CarDTO carDTO = CarMapper.INSTANCE.carToCarDTO(car);
Assertions.assertNotNull(carDTO);
Assertions.assertEquals("宝马", carDTO.getMake());
Assertions.assertEquals(5, carDTO.getSeatCount());
Assertions.assertEquals(CarType.SEDAN.name(), carDTO.getType());
}
}