它会在启动时会自动生成同名复制,生成一个临时文件,避免bean拷贝时使用反射带来的性能损害,且字段检查也是在编译时完成的,基本上就是运行时无性能损耗
评语:性能优良+功能强大,基本上你能想到的bean/多bean操作都能实现
快速使用
1.导入依赖
<!--这里我用的1.5.3.Final--><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>
避免报错(java: Internal error in the mapping processor: java.lang.NullPointerExceptio
)
原因 :这个一般是编译器自检问题,应该是lombok在mapstruct之前加载导致的
线上的:线上一般没问题,一般是用maven编译的,只要你本地使用maven编译没问题,那线上就没问题,不会使用编译器的
解决方法: Setting -->Build,Execution,Deployment -->Compiler 加上参数: -Djps.track.ap.dependencies=false
java: Internal error in the mapping processor: java.lang.NullPointerExceptio
方法一:spring模式
1.定义
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, unmappedTargetPolicy = ReportingPolicy.IGNORE, builder = @Builder(disableBuilder = true))
public interface UserMapper {Demo2 toDemo2(Demo demo);
}
2.使用
@RestController
@RequestMapping("/test")
public class TestController {@Autowiredprivate UserConver userConver;@RequestMapping("/t1")@Sensitivepublic void test() {Demo demo = new Demo(1,2,"s1",0);Demo2 demo2 = userConver.toDemo2(demo);}
}
方法二:通用(默认模式)
1.定义conver
@Mapper(componentModel = "default", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, unmappedTargetPolicy = ReportingPolicy.IGNORE, builder = @Builder(disableBuilder = true))
public interface DemoConverter {DemoConverter INSTANCE = Mappers.getMapper(DemoConverter.class);//单个bean转换(结合注解大全使用)Demo req2Entity(DemoReq req);//注意:要使用集合转换必须先声明单个bean转换,即上面这个方法List<Demo >req2Entity(List<DemoReq> list);
}
2.使用
public void agree(DemoReqreq) {Demo entity = DemoConverter .INSTANCE.req2Entity(req);}