MapStruct
参考
maven 依赖
xml
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
首先定义UserPo和UserEntity
UserPo和UserEntity的属性类型和名称完全相同。
java
package mapstruct;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserPo {
private Long id;
private Date gmtCreate;
private Date createTime;
private Long buyerId;
private Long age;
private String userNick;
private String userVerified;
}
java
package mapstruct;
import lombok.Data;
import java.util.Date;
@Data
public class UserEntity {
private Long id;
private Date gmtCreate;
private Date createTime;
private Long buyerId;
private Long age;
private String userNick;
private String userVerified;
}
定义转换接口
定义mapstruct接口,在接口上打上@Mapper注解。
接口中有一个常量和一个方法,常量的值是接口的实现类,这个实现类是Mapstruct默认帮我们实现的,下文会讲到。定义了一个po2entity的转换方法,表示把入参UserPo对象,转换成UserEntity。
注意@Mapper是Mapstruct的注解,不要引错了。
java
package mapstruct;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@Mapper
public interface IPersonMapper {
IPersonMapper INSTANCE = Mappers.getMapper(IPersonMapper.class);
UserEntity po2entity(UserPo userPo);
}
测试类
创建一个UserPo对象,并使用Mapstruct做转化。
java
package mapstruct;
import org.springframework.beans.BeanUtils;
import java.util.Date;
public class MapStructTest {
public static void main(String[] args) {
testNormal();
}
public static void testNormal() {
System.out.println("-----------testNormal-----start------");
UserPo userPo = UserPo.builder()
.id(1L)
.gmtCreate(new Date())
.buyerId(666L)
.userNick("测试mapstruct")
.userVerified("ok")
.age(18L)
.build();
System.out.println("1234" + userPo);
UserEntity userEntity = IPersonMapper.INSTANCT.po2entity(userPo);
System.out.println(userEntity);
System.out.println("-----------testNormal-----ent------");
}
}