一.什么是MapStruct?
MapStruct是用于代码中JavaBean对象之间的转换,例如DO转换为DTO,DTO转换为VO,或Entity转换为VO等场景,虽然Spring库和
Apache 的库提供了类似BeanUtils用于转换对象,但是性能不佳(需要判断类是否被加载,如果没加载,还要加载类。因此反射性能低),
并且要类型和名称一样才能进行映射,因此可以推荐使用MapStruct,不仅可以快速实现JavaBean之间的转换,且能实现List之间的转换,
而且性能不错;
二.使用MapStruct
1.引入依赖:
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);
}
}
结果如图
手机扫一扫
移动阅读更方便
你可能感兴趣的文章