一.什么是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的更多相关文章

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

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

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

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

  3. Java实体映射工具MapStruct使用详解

    1.序 通常在后端开发中经常不直接返回实体Entity类,经过处理转换返回前端,前端提交过来的对象也需要经过转换Entity实体才做存储:通常使用的BeanUtils.copyProperties方法 ...

  4. 在线数据库表(sql语句)生成java实体类工具

    相信每个做java开发的读者,都接触过SQL建表语句,尤其是在项目开发初期,因为数据库是项目的基石. 在现代项目开发中,出现了许多ORM框架,通过简单的实体映射,即可实现与数据库的交互,然而我们最初设 ...

  5. ASP.NET Core扩展库之实体映射

    在分层设计模式中,各层之间的数据通常通过数据传输对象(DTO)来进行数据的传递,而大多数情况下,各层数据的定义结构大同小异,如何在这些定义结构中相互转换,之前我们通过使用AutoMapper库,但Au ...

  6. Mybatis自动生成实体类和实体映射工具

    Mybatis Mysql生成实体类 用到的Lib包: mybatis-generator-core-1.3.2.jarmysql-connector-java-5.1.30.jar 1. 创建一个文 ...

  7. 【代码工具】Orika JavaBean映射工具探秘

    转自:https://www.cnblogs.com/albert1024/articles/8434741.html Orika是一个简单.快速的JavaBean拷贝框架,Orika使用字节代码生成 ...

  8. 常用工具说明--Java的常用工具

    1.Eclipse.IntelliJ IDEA Eclipse是IDE领域的瑞士军刀,有着大量定制的接口和无数的插件.它无处不在,后面本文将推荐的其他所有工具都提供Eclipse插件. Eclipse ...

  9. Dozer JAVA的POJO 映射工具

    Dozerhttp://www.manongjc.com/article/50949.html JAVA的映射工具 BeanUtils dozer的使用方法https://blog.csdn.net/ ...

随机推荐

  1. 小心你的个人信息——GitHub 热点速览 v.21.09

    作者:HelloGitHub-小鱼干 浏览过必有痕迹,有什么可以抹去社交痕迹的方法呢?social-analyzer 是一个可在 350+ 网站分析特定用户资料的工具,你可以用它来"人肉&q ...

  2. java中ArrayList 和 LinkedList 有什么区别

    转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...

  3. 不使用map和set实现LRU——那用List?

    遇到一道面试题,不使用map和set实现LRU,要求get的时间复杂度为O(logn),put的时间复杂度不超过O(n).想到了用ArrayList来实现,保存有序的key.然而牵涉add节点,在保证 ...

  4. POJ-2406(KMP+字符串压缩)

    Power String POJ-2406 字符串压缩模板题,但是是求有多少个这样最短的子串可以组成s. #include<iostream> #include<cstring> ...

  5. mongodb导入,导出实例

    MongoDB中文手册|官方文档中文版 英文版:https://docs.mongodb.com/manual/ 1.mongoexport 导出文件 打开命令行,进入我们所安装的mongodb路径下 ...

  6. Python:垃圾回收

    有很多不同的方法来实现垃圾回收,例如跟踪,引用计数,转义分析,时间戳和心跳信号等.不同的语言依赖于不同的垃圾回收实现,例如,有些将其与编译器和运行时系统集成在一起.而其他语言则可能需要事后设置,甚至可 ...

  7. TIOBE 编程语言排行榜

    https://www.tiobe.com/tiobe-index/ TIOBE 编程语言排行榜是编程语言流行趋势的一个指标

  8. Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the proxy settings in Gradle.

    修改项目下build.gradle文件 在jcenter()前添加mavenCentral() 1 // Top-level build file where you can add configur ...

  9. io流(io流的引入与文件字节流)

    io流的引入与文件字节流 io流:就是一根吸管,插入后,可以操作目标文件 io流的分类: 按方向:输入,输出 按大小:字节,字符 按处理方式: 处理流:"管套着管" --- 流结合 ...

  10. Tomcat详解系列(2) - 理解Tomcat架构设计

    Tomcat - 理解Tomcat架构设计 前文我们已经介绍了一个简单的Servlet容器是如何设计出来,我们就可以开始正式学习Tomcat了,在学习开始,我们有必要站在高点去看看Tomcat的架构设 ...