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

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

  1. 引入依赖
        <!--引入 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>
  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: 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);
}
  1. 创建具体类接口
/**
 * @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);

}

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容