【工具库】Java实体映射工具MapStruct
一.什么是MapStruct?
MapStruct是用于代码中JavaBean对象之间的转换,例如DO转换为DTO,DTO转换为VO,或Entity转换为VO等场景,虽然Spring库和
Apache 的库提供了类似BeanUtils用于转换对象,但是性能不佳(需要判断类是否被加载,如果没加载,还要加载类。因此反射性能低),
并且要类型和名称一样才能进行映射,因此可以推荐使用MapStruct,不仅可以快速实现JavaBean之间的转换,且能实现List之间的转换,
而且性能不错;
二.使用MapStruct
1.引入依赖:
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>1.2.0.Final</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.2.0.Final</version>
<optional>true</optional>
</dependency>
2.编写转换器 这里使用Entity转换为VO对象为例
package com.gabriel.stage.vo.transfer; import com.gabriel.stage.entity.Car;
import com.gabriel.stage.vo.CarVO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers; import java.util.List; /**
* @author: Gabriel
* @date: 2020/3/11 23:33
* @description Car 实体->VO 转换器
*/
@Mapper
public interface CarVOTransfer { CarVOTransfer INSTANCE = Mappers.getMapper(CarVOTransfer.class); /**
* 实体对象->vo对象
* @param car
* @return
*/
CarVO entityToVO(Car car); /**
* 实体集合->vo集合
* @param carList
* @return
*/
List<CarVO> entityListToVOList(List<Car> carList);
}
Entity对象
package com.gabriel.stage.entity; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor; import java.math.BigDecimal; /**
* @author: Gabriel
* @date: 2020/1/28 19:21
* @description 实体类-- Car
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Car { /** 指定自增id */
private Integer id; /** 名称 */
private String name; /** 品牌 */
private String brand; /** 价格 */
private BigDecimal price;
}
VO对象
package com.gabriel.stage.vo; import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; import java.math.BigDecimal; /**
* @author: Gabriel
* @date: 2020/3/11 23:37
* @description
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CarVO { /** 指定自增id */
private Integer id; /** 名称 */
private String name; /** 品牌 */
private String brand; }
测试类
package com.gabriel.stage.vo; import com.gabriel.stage.entity.Car;
import com.gabriel.stage.vo.transfer.CarVOTransfer;
import com.google.common.collect.Lists; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List; /**
* @author: Gabriel
* @date: 2020/3/12 0:00
* @description 测试类
*/
public class TestTransfer {
public static void main(String[] args) {
//转换对象
Car car = Car.builder().name("奔驰S600").brand("奔驰").id(1).price(new BigDecimal(9999.99)).build(); CarVO carVO = CarVOTransfer.INSTANCE.entityToVO(car); System.out.println("MapStruct转换对象"+carVO); System.out.println("=======================华丽的分割线==================="); //转换集合
List<Car> carList = Lists.newArrayList(car); List<CarVO> carVOList = CarVOTransfer.INSTANCE.entityListToVOList(carList); System.out.println("MapStruct转换集合"+carVOList); }
}
结果如图
【工具库】Java实体映射工具MapStruct的更多相关文章
- Java实体映射工具MapStruct的使用
官网地址:http://mapstruct.org/ MapStruct 是一个代码生成器,简化了不同的 Java Bean 之间映射的处理,所谓的映射指的就是从一个实体变化成一个实体.例如我们在实际 ...
- 推荐一个 Java 实体映射工具 MapStruct
声明: 1.DO(业务实体对象),DTO(数据传输对象). 2.我的代码中用到了 Lombok ,不了解的可以自行了解一下,了解的忽略这条就好. 在一个成熟的工程中,尤其是现在的分布式系统中,应用与应 ...
- Java实体映射工具MapStruct使用详解
1.序 通常在后端开发中经常不直接返回实体Entity类,经过处理转换返回前端,前端提交过来的对象也需要经过转换Entity实体才做存储:通常使用的BeanUtils.copyProperties方法 ...
- 在线数据库表(sql语句)生成java实体类工具
相信每个做java开发的读者,都接触过SQL建表语句,尤其是在项目开发初期,因为数据库是项目的基石. 在现代项目开发中,出现了许多ORM框架,通过简单的实体映射,即可实现与数据库的交互,然而我们最初设 ...
- ASP.NET Core扩展库之实体映射
在分层设计模式中,各层之间的数据通常通过数据传输对象(DTO)来进行数据的传递,而大多数情况下,各层数据的定义结构大同小异,如何在这些定义结构中相互转换,之前我们通过使用AutoMapper库,但Au ...
- Mybatis自动生成实体类和实体映射工具
Mybatis Mysql生成实体类 用到的Lib包: mybatis-generator-core-1.3.2.jarmysql-connector-java-5.1.30.jar 1. 创建一个文 ...
- 【代码工具】Orika JavaBean映射工具探秘
转自:https://www.cnblogs.com/albert1024/articles/8434741.html Orika是一个简单.快速的JavaBean拷贝框架,Orika使用字节代码生成 ...
- 常用工具说明--Java的常用工具
1.Eclipse.IntelliJ IDEA Eclipse是IDE领域的瑞士军刀,有着大量定制的接口和无数的插件.它无处不在,后面本文将推荐的其他所有工具都提供Eclipse插件. Eclipse ...
- Dozer JAVA的POJO 映射工具
Dozerhttp://www.manongjc.com/article/50949.html JAVA的映射工具 BeanUtils dozer的使用方法https://blog.csdn.net/ ...
随机推荐
- let、const、var区别?
let.const.var区别? let和const不存在变量提升(没有预解析,var有预解析). let和const在同一作用域范围内不能重复定义变量.(var可以). let和const有严格的作 ...
- springboot源码解析-管中窥豹系列之BeanFactoryPostProcessor(十一)
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...
- LNMP配置——Nginx配置 ——Nginx防盗链
一.配置 #vi /usr/local/nginx/conf/vhost/test.com.conf 写入: server { listen 80; server_name test.com test ...
- 【数据结构与算法】——链表(Linked List)
链表(Linked List)介绍 链表是有序的列表,但是它在内存中是存储如下: 链表是以节点的方式来存储的,是链式存储. 每个节点包含data域,next域:指向下一个节点. 如图:链表的各个节点不 ...
- HDFS的上传流程以及windows-idea操作文件上传的注意
HDFS的上传流程 命令:hdfs dfs -put xxx.wmv /hdfs的文件夹 cd进入到要上传文件的当前目录,再输入hdfs命令上传,注意-put后tab可以自动补全, 最后加上你要上传到 ...
- 1x1卷据层的作用
1. 尽管1x1的卷据不会捕捉空间特征(spatial features/patterns,直观点说就是2D平面图的纹理特征),但是他们能很好基于通道(channel-wise/along the d ...
- SpringBoot入门学习看这一篇就够了
1.SpringBoot是什么? SpringBoot是一套基于Spring框架的微服务框架. 2.为什么需要SpringBoot 由于Spring是一个轻量级的企业开发框架,主要的功能就是用于整合和 ...
- get和post的区别主要有以下几方面
1.url可见性: get,参数url可见: post,url参数不可见 2.数据传输上: get,通过拼接url进行传递参数: post,通过body体传输参数 3.缓存性: get请求是可以缓存的 ...
- Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?
Redis是目前广为人知的一个内存数据库,在各个场景中都有着非常丰富的应用,前段时间Redis推出了6.0的版本,在新版本中采用了多线程模型. 因为我们公司使用的内存数据库是自研的,按理说我对Redi ...
- POJ3278_Catch That Cow(JAVA语言)
思路:bfs裸题.三个选择:向左一个单位,向右一个单位,向右到2*x //注意,需要特判n是否大于k,大于k时只能向左,输出n-k.第一次提交没注意,结果RE了,, Catch That Cow Ti ...