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