# 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 映射工具的更多相关文章

  1. 推荐一个 Java 实体映射工具 MapStruct

    声明: 1.DO(业务实体对象),DTO(数据传输对象). 2.我的代码中用到了 Lombok ,不了解的可以自行了解一下,了解的忽略这条就好. 在一个成熟的工程中,尤其是现在的分布式系统中,应用与应 ...

  2. Java实体映射工具MapStruct的使用

    官网地址:http://mapstruct.org/ MapStruct 是一个代码生成器,简化了不同的 Java Bean 之间映射的处理,所谓的映射指的就是从一个实体变化成一个实体.例如我们在实际 ...

  3. EF架构~AutoMapper对象映射工具简化了实体赋值的过程

    回到目录 AutoMapper是一个.NET的对象映射工具,一般地,我们进行面向服务的开发时,都会涉及到DTO的概念,即数据传输对象,而为了减少系统的负载,一般我们不会把整个表的字段作为传输的数据,而 ...

  4. Java微信公众号开发-外网映射工具配置

    一.开发环境准备 1.一个微信公众号 2.外网映射工具(开发调试)如花生壳.ngrok工具 注:与微信对接的URL要具备以下条件a:在公网上能够访问 b:端口只支持80端口 这里使用ngrok.cc: ...

  5. [转]p2p端口映射工具 dog-tunnel

    [转]p2p端口映射工具 dog-tunnel http://www.oschina.net/p/dog-tunnel 狗洞是一个高速的 P2P 端口映射工具,同时支持Socks5代理. 0.5版后开 ...

  6. apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard

    apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard 想在苹果电脑 mac 系统下使用 机械键盘,大部分机械键盘不是为mac设计的,所 ...

  7. 端口映射工具 redir/socat/xinetd - 运维技术 - 开源中国社区

    端口映射工具 redir/socat/xinetd - 运维技术 - 开源中国社区 端口映射工具 redir/socat/xinetd    10人收藏此文章, 我要收藏 发表于3天前(2013-08 ...

  8. .NET的DTO映射工具AutoMapper

    .NET的DTO映射工具AutoMapper 原文:https://github.com/AutoMapper/AutoMapper/wiki/Getting-started 参考:http://ww ...

  9. .NET的对象映射工具AutoMapper使用笔记

    AutoMapper是一个.NET的对象映射工具. 项目地址:https://github.com/AutoMapper/AutoMapper. 帮助文档:https://github.com/Aut ...

随机推荐

  1. iOS UIKit x Android Widget

    Android的事件回调Listener相当于iOS的delegate回调. Android的事件回调接口Listener相当于iOS的protocol回调协议. Android的UI容器(Adapt ...

  2. 深入ObjC GCD中的dispatch group工作原理。

    本文是基于GCD的支持库libdispatch的源代码分析的结果或是用于作为源代码阅读的参考,尽量不帖代码,力求用UML图来说明工作流. 本文参考的源代码版本为v501.20.1,如有兴趣请自行到苹果 ...

  3. C# Json之序列化与反序列化

    前言:在实际开发过程中经常都要和Json打交道,序列化与反序列化就成了开发中必不可缺的技能.本篇博客就教大家如何进行Json序列化与反序列化. 首先要添加引用NuGet包,Newtonsoft.Jso ...

  4. 1 数据 & 图表

    瞎逼逼:虽然是统计专业,但学艺不精.大学受过的专业训练很少,妥妥学渣.因此工作后决定重新复习,阅读材料为贾俊平的<统计学>第7版.每周更新. 我不按照书里的逻辑顺序和所有知识点来写我的笔记 ...

  5. 建筑行业的新起之秀---BIM

       近年来,BIM在国家在建筑行业的推进下逐渐走近人们的视线,而且BIM技术是作为建筑领域的一项新技术行业发展的越来越好,在很多的建筑场景都用到了BIM建模.施工.运维以及BIM+GIS等以BIM为 ...

  6. 如何搭建Docker私有仓库

    私有仓库 有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用. 本节介绍如何使用本地仓库. docker-registry 是官方提供的工具,可以用于构建私 ...

  7. 1 JAVA语言的特点

    1.可移植性 通过先将java文件编译成字节码,再由特定平台的JVM转义为机器码,使得JAVA语言具有,编写一次,到处执行的特点.可移植性好. 2.面向对象的编程 面向对象编程的良好实现.有良好的面向 ...

  8. 安卓开发之Java学习

    Java之素数(这里附上王智超大佬的博客地址)https://blog.csdn.net/weixin_43862765/article/details/103311286

  9. BeautifulSoup模块的常用方法小结

    Beautiful Soup库是解析.遍历.维护“标签树”的功能库. url = "http://desk.zol.com.cn/" request = requests.get( ...

  10. Kubernetes权威指南 第一章:Kubernetes入门

    Kubernetes是什么 官网 https://kubernetes.io/ 中文版:https://kubernetes.io/zh/ Kubernetes是谷歌十几年大规模容器管理经验的成果 是 ...