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