MapStruct 映射工具

Posted askajohnny

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MapStruct 映射工具相关的知识,希望对你有一定的参考价值。

# MapStruct 映射工具  本篇主要讲解MapStruct 一款映射工具,只需简单的定义一个Mapper接口,在编译期间,MapStruct将生成此接口的实现,据说MapStruct性能最高是Spring的CopyProperties的10倍,与手工编写映射代码相比,MapStruct通过生成繁琐且易于编写的代码来节省时间。遵循约定优于配置方法,MapStruct使用合理的默认值,但在配置或实现特殊行为时会采取措施。 ###  1.引入MapStruct的依赖 org.mapstruct mapstruct-jdk8 1.3.0.Final org.mapstruct mapstruct-processor 1.3.0.Final ###  2.使用MapStruct ####   2.1 创建实体Entity @Data @Entity @EntityListeners(AuditingEntityListener.class) public class BlogInfo { @Id @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 queryByTypeId(Integer typeId) { List list = new ArrayList<>(); blogInfoRepository.findByBlogTypeId(typeId).stream().forEach(blogInfo -> { list.add(BlogInfoConverter.INSTANCE.domain2vo(blogInfo)); }); return list; } ###  总结   **本篇主要讲解MapStruct的基本使用方法,里面的很多其他的用法我也还没深入探究,不过我本是很喜欢使用MapStruct的** > 个人博客地址: https://www.askajohnny.com 欢迎访问! > 本文由博客一文多发平台 [OpenWrite](https://openwrite.cn?from=article_bottom) 发布!

以上是关于MapStruct 映射工具的主要内容,如果未能解决你的问题,请参考以下文章

bean复制映射工具包mapstruct

学习笔记 - MapStruct 映射工具

学习笔记 - MapStruct 映射工具

Bean映射工具MapStruct介绍

实体映射最强工具类:MapStruct 真香!

属性映射工具——MapStruct