竹笋

首页 » 问答 » 灌水 » 性能高上手快,实体类转换工具MapSt
TUhjnbcbe - 2023/4/8 21:36:00

1.什么是MapStruct

1.1JavaBean的困扰

对于代码中JavaBean之间的转换,一直是困扰我很久的事情。在开发的时候我看到业务代码之间有很多的JavaBean之间的相互转化,非常的影响观感,却又不得不存在。我后来想的一个办法就是通过反射,或者自己写很多的转换器。

第一种通过反射的方法确实比较方便,但是现在无论是BeanUtils,BeanCopier等在使用反射的时候都会影响到性能。虽然我们可以进行反射信息的缓存来提高性能。但是像这种的话,需要类型和名称都一样才会进行映射,有很多时候,由于不同的团队之间使用的名词不一样,还是需要很多的手动set/get等功能。

第二种的话就是会很浪费时间,而且在添加新的字段的时候也要进行方法的修改。不过,由于不需要进行反射,其性能是很高的。推荐:Java进阶视频资源

1.2MapStruct带来的改变

MapSturct是一个生成类型安全,高性能且无依赖的JavaBean映射代码的注解处理器(annotationprocessor)。

注解处理器可以生成JavaBean之间那的映射代码类型安全,高性能,无依赖性

2.MapStruct入门

2.1添加依赖

2.2po类

2.3dto类

2.4创建转换接口

2.5测试方法

2.6运行效果

2.7查看编译的class

底层通过自动取值赋值操作完成

3.MapStruct优点分析

3.1性能高

这是相对反射来说的,反射需要去读取字节码的内容,花销会比较大。而通过MapStruct来生成的代码,其类似于人手写。速度上可以得到保证。

3.2使用简单

如果是完全映射的,使用起来肯定没有反射简单。用类似BeanUtils这些工具一条语句就搞定了。但是,如果需要进行特殊的匹配(特殊类型转换,多对一转换等),其相对来说也是比较简单的。

基本上,使用的时候,我们只需要声明一个接口,接口下写对应的方法,就可以使用了。当然,如果有特殊情况,是需要额外处理的。推荐:Java进阶视频资源

3.3代码独立

生成的代码是对立的,没有运行时的依赖。

3.4易于debug

在我们生成的代码中,我们可以轻易的进行debug。

4.MapStruct使用案例

4.1属性名称相同

在实现类的时候,如果属性名称相同,则会进行对应的转化。通过此种方式,我们可以快速的编写出转换的方法。(入门案例)

4.2属性名不相同

属性名不相同,在需要进行互相转化的时候,则我们可以通过

Mapping注解来进行转化。

source需要转换的对接,通常是入参target转换的对接,通常是出参igno忽略,默认false不忽略,需要忽略设置为truedefaultValue默认值expssions可以通过表达式来构造一些简单的转化关系。虽然设计的时候想兼容很多语言,不过目前只能写Java代码。

Mappings({

Mapping(source="birthdate",target="birth"),//属性名不一致映射

Mapping(target="birthformat",expssion="java(org.apache.
1
查看完整版本: 性能高上手快,实体类转换工具MapSt