MapStruct映射工具

编程

MapStruct 映射工具

 本篇主要讲解MapStruct 一款映射工具,只需简单的定义一个Mapper接口,在编译期间,MapStruct将生成此接口的实现,据说MapStruct性能最高是Spring的CopyProperties的10倍,与手工编写映射代码相比,MapStruct通过生成繁琐且易于编写的代码来节省时间。遵循约定优于配置方法,MapStruct使用合理的默认值,但在配置或实现特殊行为时会采取措施。

 1.引入MapStruct的依赖

    <dependency>

<groupId>org.mapstruct</groupId>

<artifactId>mapstruct-jdk8</artifactId>

<version>1.3.0.Final</version>

</dependency>

<dependency>

<groupId>org.mapstruct</groupId>

<artifactId>mapstruct-processor</artifactId>

<version>1.3.0.Final</version>

</dependency>

 2.使用MapStruct

  2.1 创建实体Entity

[@Data](https://my.oschina.net/difrik)

[@Entity](https://my.oschina.net/u/1260961)

@EntityListeners(AuditingEntityListener.class)

public class BlogInfo {

[@Id](https://my.oschina.net/u/3451001)

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

/**

* 博客标题

*/

@Field(analyzer = "ik_max_word" , type = FieldType.Text , searchAnalyzer = "ik_max_word")

private String blogTitle;

/**

* 博客内容

*/

@Column(columnDefinition = "text")

private String blogContent;

/**

* 博客简要

*/

private String blogShortContent;

}

  2.2 创建Vo对象或者DTO对象

@Data

@Accessors(chain = true)

public class BlogInfoVo {

private Long id;

/**

* 博客标题

*/

private String blogTitle;

/**

* 博客内容

*/

private String blogContent;

/**

* 博客简要

*/

private String blogShortContent;

}

  2.3 创建一个Mapper接口

  1.类名上面添加@Mapper注解,使用Mybatis的小伙伴要注意导入的是MapStruct的@Mapper 不要混淆

  2.写上转化方法,如果有属性 字段 或者 类型 不同可以使用 @Mappings指定

  3.当需要从字符串Date转成日期Date时候需要提供一个 uses = DateMapper.class

/**

* Media Converter

*

* @author johnny

* @create 2019-11-08 上午11:20

**/

@Mapper(uses = DateMapper.class )

public interface BlogInfoConverter {

BlogInfoConverter INSTANCE = Mappers.getMapper(BlogInfoConverter.class);

@Mappings({

@Mapping(source = "createDate", target = "createDate" ,dateFormat = "yyyy-MM-dd"),

//表示从BlogInfo的createDate 转成 BlogInfoVo的createDate 使用 yyyy-MM-dd进行转换

@Mapping(source = "createTime" , target = "createTime" , dateFormat = "yyyy-MM-dd"),

@Mapping(target = "anchors" , ignore = true)

})

BlogInfoVo domain2vo(BlogInfo blogInfo);

//这里包含 从String类型的Date转换成日期类型的Date,就需要使用 uses=DateMapper.class

BlogInfo vo2domain(BlogInfoVo blogInfoVo);

}

  贴出来:可以直接粘贴使用

  DateMapper

public class DateMapper {

public String asString(Date date) {

return date != null ? new SimpleDateFormat("yyyy-MM-dd")

.format(date) : null;

}

public Date asDate(String date) {

try {

return date != null ? new SimpleDateFormat("yyyy-MM-dd")

.parse(date) : null;

} catch (ParseException e) {

throw new RuntimeException(e);

}

}

}

  2.4 调用

  BlogInfoConverter.INSTANCE.domain2vo

@Override

public List<BlogInfoVo> queryByTypeId(Integer typeId) {

List<BlogInfoVo> list = new ArrayList<>();

blogInfoRepository.findByBlogTypeId(typeId).stream().forEach(blogInfo -> {

list.add(BlogInfoConverter.INSTANCE.domain2vo(blogInfo));

});

return list;

}

 总结

  本篇主要讲解MapStruct的基本使用方法,里面的很多其他的用法我也还没深入探究,不过我本是很喜欢使用MapStruct的

个人博客系统:https://www.askajohnny.com 欢迎访问!

本文由博客一文多发平台 OpenWrite 发布!

以上是 MapStruct映射工具 的全部内容, 来源链接: utcz.com/z/511865.html

回到顶部