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