MapStruct使用 VO DTO PO对象优雅转化

MapStruct 原理也很简单,就是在代码编译阶段生成对应的赋值代码,底层原理还是调用getter/setter方法。
VO(View Object):视图对象,用于展示层
DTO(Data Transfer Object):数据传输对象,泛指用于展示层与服务层之间的数据传输对象。
PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系。

  1. 引入依赖
        
        
          org.mapstruct
          mapstruct
          1.3.1.Final
        
        
          org.mapstruct
          mapstruct-processor
          1.3.1.Final
        
  1. 定义基础的转换接口
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: [email protected]
 * @time: 2020/12/29 15:44
 */
@MapperConfig
public interface BaseConverter {

    /**
     * 映射同名属性
     */
    @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 sourceToTarget(List var1);

    /**
     * 反向,映射同名属性,集合形式
     */
    @InheritConfiguration(name = "targetToSource")
    List targetToSource(List var1);

    /**
     * 映射同名属性,集合流形式
     */
    List sourceToTarget(Stream stream);

    /**
     * 反向,映射同名属性,集合流形式
     */
    List targetToSource(Stream stream);
}
  1. 创建具体类接口
/**
 * @description:
 * @author: faymanwang
 * @email: [email protected]
 * @time: 2020/12/29 15:48
 */
@Mapper(componentModel = "spring")
public interface PayBillConverter extends BaseConverter {

    @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);

}

参考 http://www.kailing.pub/MapStruct1.3/index.html

你可能感兴趣的:(MapStruct使用 VO DTO PO对象优雅转化)