Java实体映射工具MapStruct

createh51周前 (03-27)技术教程1

虽然Assembler/Converter是非常好用的对象,但是当业务复杂时,手写Assembler/Converter是一件耗时且容易出bug的事情,所以业界会有多种Bean Mapping的解决方案,从本质上分为动态和静态映射。

动态映射方案包括比较原始的 BeanUtils.copyProperties,其核心是在运行时根据反射动态赋值。

动态方案的缺陷在于大量的反射调用,性能比较差,内存占用多,不适合特别高并发的应用场景。

在此推荐一个库叫MapStruct。MapStruct通过注解,在编译时静态生成映射代码,其最终编译出来的代码和手写的代码在性能上完全一致,且有强大的注解等能力。如果你的IDE支持,甚至可以在编译后看到编译出来的映射代码,用来做check。

用了MapStruct之后,会节省大量的成本,让代码变得简洁如下:

@org.mapstruct.Mapper
public interface DtoAssembler { // 注意这里变成了一个接口,MapStruct会生成实现类
    DtoAssembler INSTANCE = Mappers.getMapper(DtoAssembler.class);

    // 在这里只需要指出字段不一致的情况,支持复杂嵌套
    @Mapping(target = "itemTitle", source = "item.title")
    @Mapping(target = "detailAddress", source = "order.address.detail")
    OrderDTO toDTO(Order order, Item item);

    // 如果字段没有不一致,一行注解都不需要
    Item toEntity(ItemDTO itemDTO);
}

在使用了MapStruct后,你只需要标注出字段不一致的情况,其他的情况都通过Convention over Configuration帮你解决了。

相关文章

100个Java工具类之69:提供HTTP实体处理功能的EntityUtils

在Java开发中,org.apache.http.util.EntityUtils是一个非常实用的工具类,尤其在进行HTTP请求和响应处理时。它是Apache HttpClient库的一部分,提供了一...

java编程语言中实体类属性自动生成lombok插件_v1

大家好,欢迎来到人工智复,我们的使命是互相勉励,坚定信念,认准自己的方向,坚持到底。//1. 依赖 org.projectlombok lombok 1.14.8 //2....

JPA实体类注解,看这篇就全会了

基本注解@Entity标注于实体类声明语句之前,指出该 Java 类为实体类,将映射到指定的数据库表。name(可选):实体名称。 缺省为实体类的非限定名称。该名称用于引用查询中的实体。不与 @Tab...

mybatis根据表逆向自动化生成代码:自动生成实体类、mapper文件

若采用mybatis框架,数据库新建表,手动编写的话,需要编写大量的实体类、mapper文件、mapper.xml文件,都是一些重复且有规律的工作。我们可以引用插件,然后做配置,自动生成这些文件,提供...

Java 实体映射工具 MapStruct

简介: 让你的DO(业务实体对象),DTO(数据传输对象)数据转换更简单强大前言 在软件架构中,分层式结构是最常见,各层之间有其独立且隔离的业务逻辑,也因而各层有自己的输入输出对象,也就是代码中见到各...

Java的抽象类与举例说明

#暑期创作大赛#1.抽象类我们知道类是产生对象的模板;那么我们可以将抽象类理解为是产生 实体类的模板。在 Java 中可以专门创建一种父类,它的子类必须遵循父类设定的规则,但父类又不能 直接创建对象,...