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 映射工具的更多相关文章
- 推荐一个 Java 实体映射工具 MapStruct
声明: 1.DO(业务实体对象),DTO(数据传输对象). 2.我的代码中用到了 Lombok ,不了解的可以自行了解一下,了解的忽略这条就好. 在一个成熟的工程中,尤其是现在的分布式系统中,应用与应 ...
- Java实体映射工具MapStruct的使用
官网地址:http://mapstruct.org/ MapStruct 是一个代码生成器,简化了不同的 Java Bean 之间映射的处理,所谓的映射指的就是从一个实体变化成一个实体.例如我们在实际 ...
- EF架构~AutoMapper对象映射工具简化了实体赋值的过程
回到目录 AutoMapper是一个.NET的对象映射工具,一般地,我们进行面向服务的开发时,都会涉及到DTO的概念,即数据传输对象,而为了减少系统的负载,一般我们不会把整个表的字段作为传输的数据,而 ...
- Java微信公众号开发-外网映射工具配置
一.开发环境准备 1.一个微信公众号 2.外网映射工具(开发调试)如花生壳.ngrok工具 注:与微信对接的URL要具备以下条件a:在公网上能够访问 b:端口只支持80端口 这里使用ngrok.cc: ...
- [转]p2p端口映射工具 dog-tunnel
[转]p2p端口映射工具 dog-tunnel http://www.oschina.net/p/dog-tunnel 狗洞是一个高速的 P2P 端口映射工具,同时支持Socks5代理. 0.5版后开 ...
- apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard
apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard 想在苹果电脑 mac 系统下使用 机械键盘,大部分机械键盘不是为mac设计的,所 ...
- 端口映射工具 redir/socat/xinetd - 运维技术 - 开源中国社区
端口映射工具 redir/socat/xinetd - 运维技术 - 开源中国社区 端口映射工具 redir/socat/xinetd 10人收藏此文章, 我要收藏 发表于3天前(2013-08 ...
- .NET的DTO映射工具AutoMapper
.NET的DTO映射工具AutoMapper 原文:https://github.com/AutoMapper/AutoMapper/wiki/Getting-started 参考:http://ww ...
- .NET的对象映射工具AutoMapper使用笔记
AutoMapper是一个.NET的对象映射工具. 项目地址:https://github.com/AutoMapper/AutoMapper. 帮助文档:https://github.com/Aut ...
随机推荐
- python中的__call__方法
在Python中,函数其实是一个对象: >>> f = abs >>> f.__name__ 'abs' >>> f(-) 由于 f 可以被调用, ...
- 真的,Kafka 入门一篇文章就够了
初识 Kafka 什么是 Kafka Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区.多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订 ...
- [Odoo12基础教程]之win10中odoo12环境搭建
所需材料 1.python3.7 2.pycharm社区版及以上 3.postgresSQL10 下载链接:https://www.enterprisedb.com/thank-you-downloa ...
- 【2018寒假集训 Day2】【动态规划】又上锁妖塔
又上锁妖塔 (tower.in/tower.out) [题目描述] 小D在X星买完了想要的东西,在飞往下一个目的地的途中,正无聊的他转头看了看身边的小A,发现小A正在玩<仙剑>,可是小A很 ...
- IDM下载工具使用
平时网上找资料,找视频,难免都需要下载到本地,奈何下载速度都一般,最近发现一款多线程下载工具,堪称无敌!!
- scrapy结合selenium抓取武汉市环保局空气质量日报
1.前言 目标网站:武汉市环境保护局(http://hbj.wuhan.gov.cn/viewAirDarlyForestWaterInfo.jspx).scrapy对接selenium模块抓取空气质 ...
- P1055 ISBN号码
题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括99位数字.11位识别码和33位分隔符,其规定格式如x-xxx-xxxxx-x,其中符号-就是分隔符(键盘上的减号),最后一位 ...
- 【JavaEE】之SSM-Maven依赖积累
本帖中收集JavaEE SSM框架使用的Maven版本库中的依赖.本帖持续更新...... 日志输出: <dependency> <groupId>commons-loggin ...
- Prometheus PromQL 简单用法
目录 说明 CPU 内存 磁盘监控 磁盘空间利用率百分比 预计饱和 说明 基于上一篇文章的基础,这里做一些关于 CPU.内存.磁盘的一些基础查询语句. CPU 通过查询 metric值为 node_c ...
- OSI案例详解+ARP+DNS
案例,淘宝买东西 DNS 域名的作用其实就是相对ip地址来说更好记忆和识别,DNS就是根据域名解析出ip 一次请求,DNS解析的过程 1.在浏览器输入一个域名,操作系统首先会检查自己的本地hosts文 ...