mapstruct实现各个实体间的类型转换(DTO转BO、BO转Entity)的实践

目录

一、引入

二、Mapstruct

2.1、Mapstruct和BeanUtil的比较 

2.2、优势,为什么选择Mapstruct

2.3、快速入门

2.3.1、引入依赖

2.3.1、定义DTO和BO 

2.4.1、定义Convert接口

2.4、性能好的原因


一、引入

在没有遇见mapstruct的时候,实现各个实体之间的转换,都是手动转换实现的,属性少一点还好,当属性一多,代码就会变得很冗余,没必要的非逻辑的代码就会加多。。。。

比如:

public class UserDTO {
    private String username;
    private String email;
    private boolean isActive;

    // Getters and setters
    // Constructor
    // Other methods as needed
}

// BO: UserBO.java
public class UserBO {
    private String username;
    private String email;
    private boolean isActive;

    // Getters and setters
    // Constructor
    // Business methods as needed
}

手动实现类型转换:

public class UserConverter {

    public static UserBO convertToBO(UserDTO userDTO) {
        UserBO userBO = new UserBO();
        userBO.setUsername(userDTO.getUsername());
        userBO.setEmail(userDTO.getEmail());
        userBO.setActive(userDTO.isActive());
        return userBO;
    }

    public static UserDTO convertToDTO(UserBO userBO) {
        UserDTO userDTO = new UserDTO();
        userDTO.setUsername(userBO.getUsername());
        userDTO.setEmail(userBO.getEmail());
        userDTO.setActive(userBO.isActive());
        return userDTO;
    }
}

这种方式,就很费时费力,一个突然的契机,我在学习DDD(领域驱动设计)架构的时候,发现up使用的mapstruct做的实体之间的转换,后面也了解了一下,发现这个工具还是很优秀的。

二、Mapstruct

MapStruct 是一个代码生成器,用于创建实现Java Bean之间转换的扩展映射器,它基于约定优于配置的方法极大地简化了 Java bean 之间映射的实现,我们只需要创建接口,MapStruct就会在编译时自动创建一个具体的实现进行对象的转换

2.1、Mapstruct和BeanUtil的比较 

Mapstruct的性能远远高于BeanUtils,这应该是大佬使用Mapstruct的主要原因,下面是我的测试结果,可以看出随着属性个数的增加,BeanUtils的耗时也在增加,并且BeanUtils的耗时跟属性个数成正比,而Mapstruct的耗时却一直是1秒,所以从对比数据可以看出Mapstruct是非常优秀的,其性能远远超过BeanUtil


BeanUtils 只能同属性映射,或者在属性相同的情况下,允许被映射的对象属性少;但当遇到被映射的属性数据类型被修改或者被映射的字段名被修改,则会导致映射失败。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值