“MapStruct 2分钟示例”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) (建立内容为“1”的新页面) |
Jihongchang(讨论 | 贡献) |
||
| 第1行: | 第1行: | ||
| − | 1 | + | === pom.xml === |
| + | <syntaxhighlight lang="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> | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | === CarType.java === | ||
| + | <syntaxhighlight lang="java"> | ||
| + | package org.example.common.enums; | ||
| + | |||
| + | public enum CarType { | ||
| + | /** | ||
| + | * 三厢轿车 | ||
| + | */ | ||
| + | SEDAN, | ||
| + | /** | ||
| + | * 运动型多用途汽车 | ||
| + | */ | ||
| + | SUV, | ||
| + | /** | ||
| + | * 皮卡:驾驶室+开放式货箱 | ||
| + | */ | ||
| + | PICKUP | ||
| + | } | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |||
| + | === Car.java === | ||
| + | <syntaxhighlight lang="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; | ||
| + | } | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |||
| + | === CarDTO.java === | ||
| + | <syntaxhighlight lang="java"> | ||
| + | package org.example.model.dto; | ||
| + | |||
| + | import lombok.Data; | ||
| + | |||
| + | @Data | ||
| + | public class CarDTO { | ||
| + | /** | ||
| + | * 制造商 | ||
| + | */ | ||
| + | private String make; | ||
| + | |||
| + | private int seatCount; | ||
| + | |||
| + | private String type; | ||
| + | } | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |||
| + | === CarMapper.java === | ||
| + | <syntaxhighlight lang="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); | ||
| + | |||
| + | } | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |||
| + | === CarMapperTest.java === | ||
| + | <syntaxhighlight lang="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()); | ||
| + | |||
| + | } | ||
| + | } | ||
| + | |||
| + | </syntaxhighlight> | ||
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());
}
}