MapStruct简单测试

1. pom.xml

推荐配置

        <properties>
            <java.version>1.8</java.version>
            <org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
        </properties>
    
    
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-jdk8</artifactId>
            <version>${org.mapstruct.version}</version>
        </dependency>

        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>${org.mapstruct.version}</version>
        </dependency>
复制代码

官方给出的配置如下Maven配置,但是会在启动时报错,原因应该是lombok注解没有添加到的中导致

<properties>
    <org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
</properties>
...
<dependencies>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>
</dependencies>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.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>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>
复制代码

2. 定义Entity类 和 DTO类

2.1 User

package com.example.lombokdemo.entity;

import lombok.Data;
import lombok.experimental.Accessors;

@Accessors(chain = true)
@Data
public class User {
    private String name;
    private Integer age;
}

复制代码

2.2 UserDTO

package com.example.lombokdemo.dto;
import com.example.lombokdemo.entity.User;
import com.google.common.base.Converter;
import lombok.Data;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.beans.BeanUtils;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

@Data
@Accessors(chain = true)
@RequiredArgsConstructor(staticName = "of")
public class UserDTO {
    @NotNull
    private String name;

    @Min(value = 2, message = "不小于2岁")
    private Integer age;

    public User convertToUser(){
        UserConverter userConverter = new UserConverter();
        User user = userConverter.convert(this);
        return user;
    }

    public UserDTO convertFor(User user){
        UserConverter userConverter = new UserConverter();
        UserDTO userDTO = userConverter.reverse().convert(user);
        return userDTO;
    }

    private static class UserConverter extends Converter<UserDTO, User> {
        @Override
        protected User doForward(UserDTO userDTO) {
            User user = new User();
            BeanUtils.copyProperties(userDTO, user);
            return user;
        }

        @Override
        protected UserDTO doBackward(User user) {
            UserDTO userDTO = UserDTO.of();
            BeanUtils.copyProperties(user, userDTO);
            return userDTO;
        }
    }
}
复制代码

@Accessors(chain = true)是lombok中的注解,可以进行链式操作

@RequiredArgsConstructor(staticName = "of") 同样是lombok中的注解,创建静态构造方法,其中staticName表示调用静态构造方法的方法名称

3. 定义转换类

package com.example.lombokdemo.converter;

import com.example.lombokdemo.dto.UserDTO;
import com.example.lombokdemo.entity.User;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

@Mapper
public interface UserConverter {
    UserConverter INSTANCE = Mappers.getMapper( UserConverter.class );

    User carToCarDto(UserDTO car);
}
复制代码

@Mapper注解是org.mapstruct.Mapper

4. 测试

package com.example.lombokdemo;

import com.example.lombokdemo.converter.UserConverter;
import com.example.lombokdemo.dto.UserDTO;
import com.example.lombokdemo.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class LombokDemoApplicationTests {

    @Test
    public void contextLoads() {
        UserDTO dto = UserDTO.of().setName("little mongo").setAge(3);
        User user = UserConverter.INSTANCE.carToCarDto(dto);
        System.out.println(user);
    }

}
复制代码

转载于:https://juejin.im/post/5d0b86ccf265da1bd260f287

猜你喜欢

转载自blog.csdn.net/weixin_34380948/article/details/93162654