@Component
class BaseGoodsMapperImpl implements BaseGoodsMapper {
@Override
public WmsMaterial GoodsDTOTOWmsGood(GoodsDTO goodsDTO) {
if ( goodsDTO == null ) {
return null;
}
WmsMaterial wmsMaterial = new WmsMaterial();
wmsMaterial.setMaterialCode( goodsDTO.getCode() );
wmsMaterial.setMaterialName( goodsDTO.getName() );
return wmsMaterial;
}
}
@Mapper(componentModel = "spring")
interface BaseGoodsMapper {
//DTO转实体类
WmsMaterial GoodsDTOTOWmsGood(GoodsDTO goodsDTO);
}
可以看到这边我没有写@Mapping但是在MpStruct自动生成的转换类中手动重写了,但是为什么不生效呢,因为MapStruct 是一个编译时代码生成框架,每次编译时都会重新成 BaseGoodsMapperImpl
类,手动添加的 setMaterialCode
和 setMaterialName
会在重新编译后被覆盖。
解决办法
老老实实用mapping匹配命名不同的字段