其他分享
首页 > 其他分享> > PO DTO VO 例子(使用mapstruct)

PO DTO VO 例子(使用mapstruct)

作者:互联网

PO DTO VO 例子(使用mapstruct)

简单解释:

PO:对应数据库数据,一一对应。

DTO:service传输数据,对PO的进一步封装,为了适应业务,可以是对个PO。

VO:视图实体,与前端交互,接收前端或者返回前端数据的实体,隐藏一些不必显示的字段。

一、添加依赖

<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-jdk8</artifactId>
    <version>1.2.0.Final</version>
</dependency>
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>1.2.0.Final</version>
</dependency>

二、依赖中添加插件(正常运行可不加)

<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.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.4</version>
            </path>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.2.0.Final</version>
            </path>
        </annotationProcessorPaths>
        <compilerArgs>
            <compilerArg>
                -Amapstruct.defaultComponentModel=spring
            </compilerArg>
            <compilerArg>
                -Amapstruct.unmappedTargetPolicy=WARN
            </compilerArg>
        </compilerArgs>
    </configuration>
</plugin>

三、创建实体类

1、创建PO对象

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ScArticle implements Serializable {
    /**
     * 文章id
     */
    private Integer id;

    /**
     * 新闻编号
     */
    private String code;

    /**
     * 文章标题
     */
    private String title;

    /**
     * 文章内容
     */
    private String content;


    private static final long serialVersionUID = 1L;
}

2、创建VO对象

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ScArtileVO {

    /**
     * 新闻编号
     */
    private String code;

    /**
     * 文章标题
     */
    private String title;

    private static final long serialVersionUID = 1L;
}

此处DTO传输对象与PO对象一样,因此直接演示PO转化VO。主要演示mapstruct。

四、创建转化接口

@Mapper(componentModel = "spring") //spring容器管理
public interface ScArticleConvert {

    ScArtileVO scArticleToScArticleVo(ScArticle scArticle);

}

五、调用转化方法

public BaseResponse getArticleContext(String code) {

    //先PO对象
    ScArticle articleContext = scArticleMapper.getArticleContext(code);

    //将PO对象转化为VO
    ScArtileVO scArtileVO = scArticleConvert.scArticleToScArticleVo(articleContext);

    return BaseResponse.buildSuccess(scArtileVO);
}

注:如果是PO --> DTO --> VO 对象之间转化,尤其是DTO转化可能存在多个PO对象,列表等,在此举例接口方法说明:

@Mapper(componentModel = "spring")
public interface ScArticleConvert {

    //PO转化VO
    ScArtileVO scArticleToScArticleVo(ScArticle scArticle);
    
    //注解标签的使用
    @Mappings({@Mapping(target = "id", ignore = true)})
    ScArtileVO scArticleToScArticleVo(ScArticle scArticle);

    //列表转化
    List<ScArtileVO> scArticleToScArticleVo(List<ScArticle> scArticle)
        
     //数据格式化举例子
    @Mappings({@Mapping(source = "salary", target = "salary", numberFormat = "¥#.00", dateFormat = "¥0.00")})
    ScArtileVO scArticleToScArticleVo(ScArticle scArticle);
    
    //反转转化 VO -> PO
    @InheritInverseConfiguration(name = "scArticleToScArticleVo")
    ScArticle scArticleVOToScArticle(ScArtileVO scArtileVO);
}

标签:ScArtileVO,DTO,mapstruct,private,VO,ScArticle,PO
来源: https://www.cnblogs.com/chase-h/p/15979940.html