“MapStruct 2分钟示例”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
(建立内容为“1”的新页面)
 
 
第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());

    }
}