MapStruct 使用

MapStruct 说明

mapstruct 是专门用来处理上面常见实体类与属性类的属性映射的, 我们只需定义 mapper 接口,mapstruct 在编译的时候就会自动的帮我们实现这个映射接口,避免了麻烦复杂的映射实现。

项目官网和示例

项目引入 MapStruect

<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct</artifactId>
    <version>${mapstruct.version}</version>
</dependency>
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>${mapstruct.version}</version>
</dependency>
<mapstruct.version>1.5.2.Final</mapstruct.version>

项目中的应用

/**
 * @author yueF_L
 * @date 2023-01-05 13:54
 * excel 导出对象转换
 */
@Mapper(componentModel = "spring")
public interface ExcelVoMapping {

    ExcelVoMapping INSTANCE = Mappers.getMapper(ExcelVoMapping.class);

    /**
     * 设备(断面) 集合映射
     *
     * @param section
     * @return
     */
    List<SectionExcelVo> sectionToExcelVo(List<Section> section);

    /**
     * 设备(刀闸)集合映射
     *
     * @param switches
     * @return
     */
    List<SwitchExcelVo> switchToExcelVo(List<Switch> switches);

    /**
     * 设备 (交流线路串联设备)集合映射
     *
     * @param seriesEquipments
     * @return
     */
    List<SeriesEquipmentExcelVo> SeriesEquipmentToExcelVo(List<SeriesEquipment> seriesEquipments);
}

说明:入参对象的字段需要和出参对象一样,这样才能做映射。

其实底层就是正对这个结果做了一个实现类,然后new 对象后咋put进去。

@Component
public class ExcelVoMappingImpl implements ExcelVoMapping {

    @Override
    public List<SectionExcelVo> sectionToExcelVo(List<Section> section) {
        if ( section == null ) {
            return null;
        }

        List<SectionExcelVo> list = new ArrayList<SectionExcelVo>( section.size() );
        for ( Section section1 : section ) {
            list.add( sectionToSectionExcelVo( section1 ) );
        }

        return list;
    }

    @Override
    public List<SwitchExcelVo> switchToExcelVo(List<Switch> switches) {
        if ( switches == null ) {
            return null;
        }

        List<SwitchExcelVo> list = new ArrayList<SwitchExcelVo>( switches.size() );
        for ( Switch switch1 : switches ) {
            list.add( switchToSwitchExcelVo( switch1 ) );
        }

        return list;
    }

    @Override
    public List<SeriesEquipmentExcelVo> SeriesEquipmentToExcelVo(List<SeriesEquipment> seriesEquipments) {
        if ( seriesEquipments == null ) {
            return null;
        }

        List<SeriesEquipmentExcelVo> list = new ArrayList<SeriesEquipmentExcelVo>( seriesEquipments.size() );
        for ( SeriesEquipment seriesEquipment : seriesEquipments ) {
            list.add( seriesEquipmentToSeriesEquipmentExcelVo( seriesEquipment ) );
        }

        return list;
    }

    protected SectionExcelVo sectionToSectionExcelVo(Section section) {
        if ( section == null ) {
            return null;
        }

        SectionExcelVo sectionExcelVo = new SectionExcelVo();

        sectionExcelVo.setId( section.getId() );
        sectionExcelVo.setName( section.getName() );
        sectionExcelVo.setSectionType( section.getSectionType() );
        sectionExcelVo.setGridName( section.getGridName() );
        sectionExcelVo.setTimeIn( section.getTimeIn() );
        sectionExcelVo.setTimeOut( section.getTimeOut() );
        sectionExcelVo.setpDeptName( section.getpDeptName() );
        sectionExcelVo.setqDeptName( section.getqDeptName() );
        sectionExcelVo.setUpdater( section.getUpdater() );
        sectionExcelVo.setUpdateTime( section.getUpdateTime() );

        return sectionExcelVo;
    }

    protected SwitchExcelVo switchToSwitchExcelVo(Switch switch1) {
        if ( switch1 == null ) {
            return null;
        }

        SwitchExcelVo switchExcelVo = new SwitchExcelVo();

        switchExcelVo.setId( switch1.getId() );
        switchExcelVo.setCode( switch1.getCode() );
        switchExcelVo.setName( switch1.getName() );
        switchExcelVo.setStationName( switch1.getStationName() );
        switchExcelVo.setNode1Name( switch1.getNode1Name() );
        switchExcelVo.setNode2Name( switch1.getNode2Name() );
        switchExcelVo.setStatus( switch1.getStatus() );
        switchExcelVo.setTimeIn( switch1.getTimeIn() );
        switchExcelVo.setTimeOut( switch1.getTimeOut() );
        switchExcelVo.setManagerName( switch1.getManagerName() );

        return switchExcelVo;
    }

    protected SeriesEquipmentExcelVo seriesEquipmentToSeriesEquipmentExcelVo(SeriesEquipment seriesEquipment) {
        if ( seriesEquipment == null ) {
            return null;
        }

        SeriesEquipmentExcelVo seriesEquipmentExcelVo = new SeriesEquipmentExcelVo();

        seriesEquipmentExcelVo.setId( seriesEquipment.getId() );
        seriesEquipmentExcelVo.setCode( seriesEquipment.getCode() );
        seriesEquipmentExcelVo.setName( seriesEquipment.getName() );
        seriesEquipmentExcelVo.setUnit( seriesEquipment.getUnit() );
        seriesEquipmentExcelVo.setAclineId( seriesEquipment.getAclineId() );
        seriesEquipmentExcelVo.setNodeName( seriesEquipment.getNodeName() );
        seriesEquipmentExcelVo.setOrder_( seriesEquipment.getOrder_() );
        seriesEquipmentExcelVo.setClass_( seriesEquipment.getClass_() );
        seriesEquipmentExcelVo.setVn( seriesEquipment.getVn() );
        seriesEquipmentExcelVo.setIn_( seriesEquipment.getIn_() );
        seriesEquipmentExcelVo.setX( seriesEquipment.getX() );
        seriesEquipmentExcelVo.setModelParmId( seriesEquipment.getModelParmId() );
        seriesEquipmentExcelVo.setTimeIn( seriesEquipment.getTimeIn() );
        seriesEquipmentExcelVo.setTimeOut( seriesEquipment.getTimeOut() );
        seriesEquipmentExcelVo.setRemark( seriesEquipment.getRemark() );

        return seriesEquipmentExcelVo;
    }
}

如果入参与出参的字段名称不一样话需要加注解来进行转换。

  • target : 表示转换后的字段
  • source : 表示转换前的源字段
  @Mappings({
            @Mapping(target = "myProjectId", source = "section.projectId"),
    })
    SectionExcelVo formatterSection(Section section);

猜你喜欢

转载自blog.csdn.net/weixin_38982591/article/details/128565498