MapStruct 原理也很简单,就是在代码编译阶段生成对应的赋值代码,底层原理还是调用getter/setter方法。
VO(View Object):视图对象,用于展示层
DTO(Data Transfer Object):数据传输对象,泛指用于展示层与服务层之间的数据传输对象。
PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系。
- 引入依赖
<!--引入 MapStruct 的依赖-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.3.1.Final</version>
</dependency>
- 定义基础的转换接口
import org.mapstruct.InheritConfiguration;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.MapperConfig;
import org.mapstruct.Mapping;
import java.util.List;
import java.util.stream.Stream;
/**
* @description:
* @author: faymanwang
* @email: 1057438332@qq.com
* @time: 2020/12/29 15:44
*/
@MapperConfig
public interface BaseConverter<SOURCE, TARGET> {
/**
* 映射同名属性
*/
@Mapping(target = "createTime", dateFormat = "yyyy-MM-dd HH:mm:ss")
TARGET sourceToTarget(SOURCE var1);
/**
* 反向,映射同名属性
*/
@InheritInverseConfiguration(name = "sourceToTarget")
SOURCE targetToSource(TARGET var1);
/**
* 映射同名属性,集合形式
*/
@InheritConfiguration(name = "sourceToTarget")
List<TARGET> sourceToTarget(List<SOURCE> var1);
/**
* 反向,映射同名属性,集合形式
*/
@InheritConfiguration(name = "targetToSource")
List<SOURCE> targetToSource(List<TARGET> var1);
/**
* 映射同名属性,集合流形式
*/
List<TARGET> sourceToTarget(Stream<SOURCE> stream);
/**
* 反向,映射同名属性,集合流形式
*/
List<SOURCE> targetToSource(Stream<TARGET> stream);
}
- 创建具体类接口
/**
* @description:
* @author: faymanwang
* @email: 1057438332@qq.com
* @time: 2020/12/29 15:48
*/
@Mapper(componentModel = "spring")
public interface PayBillConverter extends BaseConverter<PayBill,PayBillVo> {
@Mapping(target = "createDate", dateFormat = "yyyy-MM-dd HH:mm:ss")
@Mapping(target = "modifyDate", dateFormat = "yyyy-MM-dd HH:mm:ss")
@Override
PayBillVo sourceToTarget(PayBill payBill);
}
网友评论