【工具库】Java实体映射工具MapStruct
阅读原文时间:2021年11月08日阅读:2

一.什么是MapStruct?

  MapStruct是用于代码中JavaBean对象之间的转换,例如DO转换为DTO,DTO转换为VO,或Entity转换为VO等场景,虽然Spring库和

Apache 的库提供了类似BeanUtils用于转换对象,但是性能不佳(需要判断类是否被加载,如果没加载,还要加载类。因此反射性能低),

并且要类型和名称一样才能进行映射,因此可以推荐使用MapStruct,不仅可以快速实现JavaBean之间的转换,且能实现List之间的转换,

而且性能不错;

二.使用MapStruct

  1.引入依赖:

org.mapstruct mapstruct-jdk8 1.2.0.Final true
org.mapstruct mapstruct-processor 1.2.0.Final true

  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);

}  

}

  结果如图
  

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章