A. What is MapStruct?
MapStruct for conversion between JavaBean object code, for example, DO is converted to DTO, DTO converted to VO, VO or Entity converted to other scenes, and although Spring libraries
Apache libraries provided for converting BeanUtils similar objects, but poor performance (determines whether the required class is loaded, if not loaded, but also to load the class. Thus a low reflection performance),
And to the type and name as it can be mapped, it can be recommended MapStruct, not only can quickly achieve conversion between JavaBean, and can achieve conversion between List,
And the performance is good;
II. Use MapStruct
1. dependence introduced:
<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. Write converter used here as an example Entity objects converted to 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 Object
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 { / ** specified increment the above mentioned id * / Private Integer the above mentioned id; / ** Name * / Private String name; / ** brand * / Private String Brand; / ** Price * / Private . price the BigDecimal; }
VO objects
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; }
Test category
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 ( " Mercedes S600") brand ( "Benz") .id (. 1) .price (. New new the BigDecimal (9999.99 )) Build ();. CarVO carVO = CarVOTransfer.INSTANCE.entityToVO (CAR); System.out.println ( "Object MapStruct conversion" + carVO); System.out.println ( "gorgeous ======================= =================== parting line " ); // sets of transitions List <Car> Carlist = Lists.newArrayList (CAR); List <CarVO> carVOList = CarVOTransfer. INSTANCE.entityListToVOList (Carlist); System.out.println ( "MapStruct sets of transitions" + carVOList); } }
The results are shown