Spring Boot

推荐这款类型转换神器!Mapstruct新出的Spring插件

2022-07-18  本文已影响0人  Java爱好者

Mapstruct可以代替BeanUtil来进行DTOVOPO之间的转换。它使用的是Java编译期的 annotation processor 机制,说白了它就是一个代码生成器,代替你手工进行类型转换期间的取值赋值操作。

小编很多项目都使用了它,代码清爽得很,增加了大量摸鱼时间,用过的都说好。

就这么几行就把一个PO的集合转换成了对应VO的集合。

换成你手写试试,起码得五分之一炷香的功夫。

但是这样写还是不太爽,每次都要挂对应的Mapper类。

Converter

Spring framework提供了一个Converter<S,T>接口:

它的作用是将S转换为T,这和Mapstruct的作用不谋而合。

Converter会通过ConverterRegistry这个注册接口注册到ConversionService,然后你就可以通过ConversionService的convert方法来进行转换:


MapStruct Spring Extensions

根据上面的机制官方推出了MapStruct Spring Extensions插件, 它实现了一种机制,所有的Mapstruct映射接口(Mapper)只要实现了Converter,都会自动注册到ConversionService,我们只需要通过ConversionService就能完成任何转换操作。

调用时:

MapStruct Spring Extensions 会自动生成一个适配类处理Mapper注册:


自定义

自定义适配类的包路径和名称

默认情况下,生成的适配类将位于包org.mapstruct.extensions.spring.converter中,名称固定为ConversionServiceAdapter。如果你希望修改包路径或者名称,你可以这样:

不指定conversionServiceAdapterPackage元素,生成的 Adapter 类将与注解的 Config 驻留在同一个包中,所以上面的路径是可以省略的。


指定ConversionService

如果你的Spring IoC容器中有多个ConversionService,你可以通过@SpringMapperConfig注解的conversionServiceBeanName 参数指定。


集成Spring的内置转换

Spring内部提供了很多好用的Converter实现,有的并不直接开放,如果你想用Mapstruct的机制使用它们,可以通过@SpringMapperConfig注解的 externalConversions注册它们。

会在适配器中自动生成相应的转换:

总结

mapstruct-spring-annotations使开发人员能够通过ConversionService使用定义的Mapstruct映射器,而不必单独导入每个Mapper,从而允许Mapper之间的松散耦合。,它本身不会影响Mapstruct的机制。

上一篇 下一篇

猜你喜欢

热点阅读