首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

业务代码救星——Java 对象转换框架 MapStruct 妙用

在业务项目的开发中,我们经常需要将 Java 对象进行转换,比如从外部微服务得到对象换为本域业务对象 domainobject, domainobject 转为数据持久层 dataobject..., domainobject 转换为 DTO 以便返回给外部调用方等。...业务场景 假设现在有这么个场景,从数据库查询出来了一个 user 对象包含 id,用户名,密码,手机号,邮箱,角色这些字段)一个对应角色对象 role(包含 id,角色名,角色描述这些字段),现在在...* @Mapper 定义这是一个MapStruct对象属性转换接口,在这个类里面规定转换规则 * 在项目构建时,会自动生成改接口实现类,这个实现类实现对象属性值复制 */@Mapperpublic...但是,如果需要进行特殊匹配(特殊类型转换, 多对一换等), MapStruct 优势就比较明显了,基本上我们只需要在使用时候声明一个接口接口下写对应方法, 就可以使用了(当然, 如果有特殊情况

1.8K40
您找到你想要的搜索结果了吗?
是的
没有找到

还用 BeanUtils 拷贝对象MapStruct 才是王者!一文玩转 MapStruct 全场景【附源码】

,代码无法正常运行; 能明确查看转换细节 编译生成class对象可以看到详细转换过程,方便快速定位转换过程中问题。...MapStruct 常用重要注解 : @Mapper 标记这个接口作为一个映射接口,并且是编译时 MapStruct 处理器入口 @Mapping 解决源对象目标对象中,属性名字不同情况 @Mappings...,就得定义一个接口和数个互转方法; 为了不用每次都去写那些重复转换方法,这里对转换接口再向上做一次抽象; 定义基础转换接口 包含了最基本4种转换方式 /** * 基础对象转换Mapper...;这里测试所有的Date数据全部转换为 yyyy-MM-dd 文本 测试对象 @Data @Builder @AllArgsConstructor @NoArgsConstructor @ToString...测试场景 分别通过MapStruct BeanUtils 将相同对象转换100W次,看看整体耗时 测试代码 /** * BeanUtils与MapStruct性能对比 */ public class

3.6K10

满屏get & set 太Low了?试试 MapStruct 高级玩法

,代码无法正常运行; 能明确查看转换细节 编译生成class对象可以看到详细转换过程,方便快速定位转换过程中问题。...MapStruct 常用重要注解 : @Mapper 标记这个接口作为一个映射接口,并且是编译时 MapStruct 处理器入口 @Mapping 解决源对象目标对象中,属性名字不同情况 @Mappings...,就得定义一个接口和数个互转方法; 为了不用每次都去写那些重复转换方法,这里对转换接口再向上做一次抽象; 定义基础转换接口 包含了最基本4种转换方式 /** * 基础对象转换Mapper...;这里测试所有的Date数据全部转换为 yyyy-MM-dd 文本 测试对象 @Data @Builder @AllArgsConstructor @NoArgsConstructor @ToString...测试场景 分别通过MapStruct BeanUtils 将相同对象转换100W次,看看整体耗时 测试代码 /** * BeanUtils与MapStruct性能对比 */ public class

3K20

带你多种方法实体类转换 玩转VO,PO,DTO 之间转换

它们主要区别在于:DTO:用于封装数据传输对象,可以数据库中数据转换为前端需要格式,方便前后端之间数据交互。...VO:用于封装值对象,可以根据具体需求来封装不同数据属性,方便前端页面的显示交互。DTO 是一种数据传输对象,用于数据库中数据转换为前端需要格式,方便前后端之间数据交互。...它包含与数据库表字段相对应私有成员变量以及相应getset方法,用于封装数据库表中一条记录。PO类通常用于数据访问层(DAO层),作为数据库与应用程序之间桥梁,实现数据持久化存储检索。...这个可以说是很简单,如果你需要添加注释,我这里推荐一个插件是BeanUtilsHelper他可以支持beanutils这个代码转换为最原始set get到方法。...之后要说是一个性能爆炸,高级优雅,大厂标准转换方法MapStcurt如果要使用 MapStruct 库进行对象之间映射,首先需要定义一个 Mapper 接口,并在接口中编写映射方法。

19410

你居然不知道MapStruct

可以通过为目标对象添加参数并使用@MappingTarget标记此参数来实现此类映射。 例如Student我们学生类名字年龄映射到VO中,但是不创建新实例。...5.映射器工厂 前面我们在Mapper接口中代码中一直有一行代码,如下所示,是MapStruct为我们提供映射工厂,指定接口类型后自动帮我们创建接口实现,且保证是线程安全单例,无需自己手动创建。...只需要在Mapper接口@Mapper注解中加入componentModel = "spring"即可。 7.数据类型转换 映射属性在源对象目标对象中具有相同类型,这种情况不全有。...另一个例子是对其他对象引用,这些对象应该映射到目标模型中相应类型。例如:Teachr类可能有一个Wife类型属性wife,在映射VO对象时需要将其转换为StudentVO对象。...10.对象工厂 有时候由于目标实例构造方法被私有化后,我们使用原来方式没办法进行,原因是MapStruct会在编译时去帮你实现,其中包含了调用构造方法。

2.3K31

Spring学习笔记(三十)——SpringBoot对象拷贝总结&Mapstruct

深拷贝浅拷贝 概念 深拷贝 深拷贝相当于创建了一个新对象,只是这个对象所有内容,都被拷贝对象一模一样而已,即两者修改是隔离,相互之间没有影响。...这个是我们在代码中用最多,比如对象拷贝,从EnityDto或者Vo,可能大部分使用对象转换,数据拷贝都使用是深拷贝。...深拷贝代码就不演示了,直接总结一下特点: * 深拷贝独立对象 * 拷贝后对象内容,与原对象内容完全没关系,都是独立 * 深拷贝是需要自己来实现,对于基本类型可以直接赋值,而对于对象、容器...整合Mapstruct工具 Mapstruct简介 MapStruct是用于生成类型安全bean映射类Java注解处理器。 你所要做就是定义一个映射器接口,声明任何需要映射方法。...在编译过程中,MapStruct将自动生成该接口实现。此实现使用纯Java方法调用源对象目标对象之间进行映射,并非Java反射机制。

2.9K10

干掉 BeanUtils!试试这款 Bean 自动映射工具,真心强大!

接口中使用@Mapper@Mapping等注解,在运行时生成接口实现类,我们可以打开项目的target目录看下; 下面是MapStruct为MemberMapper生成好对象映射代码,可以手写...也提供了集合映射功能,可以直接一个PO列表转换为一个DTO列表,再也不用一个个对象转换了!...子对象映射 MapStruct对于对象包含对象也需要转换情况也是有所支持。...OrderDto对象,OrderDto中包含MemberDtoProductDto两个子对象同样需要转换; /** * 订单Dto * Created by macro on 2021/10/12...我们只需要创建一个Mapper接口,然后通过使用uses对象转换Mapper注入进来,然后通过@Mapping设置好属性映射规则即可; /** * 订单对象映射 * Created by macro

1.9K20

SpringBoot实战:整合MapStruct实现数据类型转化

自动生成映射转换代码只使用简单方法调用,因此速度快、类型安全而且易于理解阅读;本篇就是实现 SpringBoot 整合 MapStruct 实现数据类型转化。...2、MapStruct 注释说明 注解说明: @Mapper 只有在接口加上这个注解, MapStruct 才会去实现该接口 @Mapper 里有个 componentModel 属性,主要是指定实现类类型...,一般用到两个 default:默认,可以通过 Mappers.getMapper(Class) 方式获取实例对象 spring:在接口实现类上自动添加注解 @Component,可通过...插件: 3、项目结构说明 ├── controller — 控制层(请求通过 url 匹配,分配到不同接收器/方法进行处理,然后返回结果) ├── service — 服务层接口 ​ └── impl...— 持久层需要实体对象(用于服务层与持久层之间数据传输对象) ​ └── vo — 视图层需要实体对象(用于服务层与视图层之间数据传输对象) ├── utils — 工具类 └── Application.java

1.3K20

【后端】MapStruct 使用详解

前言: 使用 MapStruct 前置知识: Entity: 最常用实体类,基本和数据表一一对应,一个实体一张表。 Bo(Business object): 代表业务对象意思。...Vo(Value Object): 返回视图层对象。 Po(Persistant Object): 代表持久层对象意思。...MapStruct 说明 mapstruct 是专门用来处理上面常见实体类与属性类属性映射, 我们只需定义 mapper 接口mapstruct 在编译时候就会自动帮我们实现这个映射接口,避免了麻烦复杂映射实现...项目官网示例 Github 地址:https://github.com/mapstruct/mapstruct/ 使用例子:https://github.com/mapstruct/mapstruct-examples...(RuleDto ruleDto); /** * entity vo * * @param rule 实体对象 * @return RuleVo

1.3K20

对象拷贝 - 优雅解决方案 Mapstruct

在编译过程中,MapStruct会生成此接口实现。该实现使用纯java方法调用目标对象之间映射,MapStruct节省了时间,通过生成代码完成繁琐容易出错代码逻辑。。...) MapStruct 提供重要注解 : @Mapper : 标记这个接口作为一个映射接口,并且是编译时 MapStruct 处理器入口 @Mapping : 解决源对象目标对象中,属性名字不同情况...开发中如需要对象转换操作可直接新建 interface 并继承 BasicObjectMapper,并在新建接口上加上 @Mapper(componentModel = "spring"),如果是属性中包含其它类以及该类已经存在...,MapStruct查找 Date 对象映射到String方法,在 DateMapper 该类上找到它并生成 asString() 用于映射该 manufacturingDate 属性调用 映射集合...生成代码包含一个遍历源集合循环,转换每个元素并将其放入目标集合中。如果在给定映射器或其使用映射器中找到了集合元素类型映射方法,则会调用此方法以执行元素转换。

6.6K20

定义一组抽象 Awaiter 实现接口,你下次写自己 await 可等待对象更加方便

然而实现 Awaiter 没有现成接口,它需要你按照编译器要求为你类型添加一些具有特定名称属性方法。...然而没有接口帮助,我们编写起来就很难获得工具(如 ReSharper)自动生成代码支持。 本文分享我提取自己实现 Awaiter 接口。...你只需要实现这些接口当中 2 个,就能正确实现一个 Awaitable Awaiter。...Awaiter: 在 WPF/UWP 中实现一个可以用 await 异步等待 UI 交互操作 Awaiter .NET 除了用 Task 之外,如何自己写一个可以 await 对象?...定义一组抽象 Awaiter 实现接口,你下次写自己 await 可等待对象更加方便 .NET 除了用 Task 之外,如何自己写一个可以 await 对象

77650

Java Review - MapStruct_使用 Intellij Maven Debug 分析MapStruct实现原理

、JSR 269 MapStruct Java动态编译是指在运行时动态地Java源代码编译成字节码并加载到Java虚拟机中执行。...通过定义映射接口相应映射方法,MapStruct 在编译时生成这些接口实现类,从而实现了类型安全对象映射,避免了手动编写繁琐且容易出错映射代码。...这个处理器会分析注解,生成映射器实现代码,然后这些代码插入到AST中。最终,javac会生成包含映射器实现类字节码文件。...:mapstruct:这个包包含MapStruct核心注解,这些注解是用来在接口方法上描述映射规则。...主要注解包括: @Mapper:用于标记一个接口MapStruct映射接口。 @Mapping:用于标记接口方法,表明该方法将会进行对象属性映射。

16610

试试这个优雅方法...

但是,如果需要进行特殊匹配(特殊类型转换,多对一换等),其相对来说也是比较简单。 基本上,使用时候,我们只需要声明一个接口接口下写对应方法,就可以使用了。...我们在实际业务中少不了多个对象转换成一个场景。...MapStruct 当然也支持多操作。...因此, 名称类型相同不需要进行特殊处理 当多个原对象中,有相同名字属性时,需要通过 @Mapping 注解来具体指定, 以免出现歧义(不指定会报错)。...另外,欢迎关注我们,公号终码一生,后台回复“资料”,获取视频教程最新面试资料。 如果是此种方法,约定俗成是在接口内定义一个接口本身实例 INSTANCE, 以方便获取对应实例。

55310

丢弃掉那些 BeanUtils 工具类吧,MapStruct 是真香!!!

应用分层 分层之后,每一层都有自己领域模型,即不同类型 Bean: DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。...通过创建一个 MapStruct Mapper 接口,并定义一个转换接口方法,后续交给 MapStruct 自动生成对象转换代码即可。...你所要做就是定义一个映射器接口,声明任何需要映射方法。在编译过程中,MapStruct 生成该接口实现。...此实现使用纯 Java 方法调用源对象目标对象之间进行映射,并非 Java 反射机制。 与手工编写映射代码相比,MapStruct 通过生成冗长且容易出错代码来节省时间。...至此,我们已经完成了 MapStruct Lombok 集成。 4. @Mapping 在对象转换时,我们可能会存在属性不是完全映射情况,例如说属性名不同。

2.1K50

芋道 Spring Boot 对象转换 MapStruct 入门

应用分层 分层之后,每一层都有自己领域模型,即不同类型 Bean: DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。...通过创建一个 MapStruct Mapper 接口,并定义一个转换接口方法,后续交给 MapStruct 自动生成对象转换代码即可。...你所要做就是定义一个映射器接口,声明任何需要映射方法。在编译过程中,MapStruct 生成该接口实现。...此实现使用纯 Java 方法调用源对象目标对象之间进行映射,并非 Java 反射机制。 与手工编写映射代码相比,MapStruct 通过生成冗长且容易出错代码来节省时间。...至此,我们已经完成了 MapStruct Lombok 集成。 4. @Mapping 在对象转换时,我们可能会存在属性不是完全映射情况,例如说属性名不同。

2.6K20

试试 MapStruct,优雅对象转换解决方案!

在开发时候我看到业务代码之间有很多 JavaBean 之间相互转化, 非常影响观感,却又不得不存在。我后来想一个办法就是通过反射,或者自己写很多转换器。...但是,如果需要进行特殊匹配(特殊类型转换,多对一换等),其相对来说也是比较简单。 基本上,使用时候,我们只需要声明一个接口接口下写对应方法,就可以使用了。...我们在实际业务中少不了多个对象转换成一个场景。...MapStruct 当然也支持多操作。 !...因此, 名称类型相同不需要进行特殊处理 当多个原对象中,有相同名字属性时,需要通过 @Mapping 注解来具体指定, 以免出现歧义(不指定会报错)。

29920
领券