MapStruct 使用

MapStruct最详细的使用教程,别在用BeanUtils.copyProperties ()

mapstruct使用和详解

项目背景

之前查看网上别人写的文章,很多都提到了BeanUtils(org.springframework.beans) 利用反射性能比较差。大家都推荐使用 MapStruct。因为这个组件使用 Java 原生的 setXxx方法,会自动生成相关代码。

代码使用

引入依赖

<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct</artifactId>
    <version>1.4.1.Final</version>
</dependency>
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>1.4.1.Final</version>
</dependency>

这里使用的是 1.4.1.Final 版本,1.3.1 idea会提示包找不到

编写Mapper,告诉 MapStruct 转换前后的类型

import org.mapstruct.factory.Mappers;
import org.mapstruct.Mapper;

import java.util.List;

@Mapper
public interface xxxConvert{

    xxxConvert INSTANCE = Mappers.getMapper(xxxConvert.class);

    /**
     * 将req转换为entity
     */
    Entity convert2Entity(Req req);

    /**
     * 将entity列表转换为resp列表
     */
    List<Resp> convertPageList(List<Entity> list);

    /**
     * 将entity转换为dto
     */
    Dto convert2Dto(Entity entity);
}

注意 @Mapper 是用 MapStruct 依赖(org.mapstruct.Mapper)的,不要和 MyBatis 的弄混。

点击编译后,MapStruct 就会在 target 目录下生成 实现类

在这里插入图片描述

@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2024-02-01T15:17:25+0800",
    comments = "version: 1.4.1.Final, compiler: javac, environment: Java 1.8.0_351 (Oracle Corporation)"
)
public class XxxConvertImpl implements XxxConvert {

    @Override
    public Entity convert2Entity(Req req) {
        if ( req == null ) {
            return null;
        }

        Entity entity = new Entity();

        entity.setId( req.getId() );
        entity.setBaseErpCode( req.getBaseErpCode() );
        //设置相关字段...

        return partBase;
    }

    @Override
    public List<Resp> convertPageList(List<Entity> list) {
        if ( list == null ) {
            return null;
        }

        List<Resp> list1 = new ArrayList<Resp>( list.size() );
        for ( Entity partBase : list ) {
            list1.add( partBaseToPartBasePageResp( entity ) );
        }

        return list1;
    }

    @Override
    public Dto convert2Dto(Entity entity) {
        if ( base == null ) {
            return null;
        }

        //具体参考上面代码
        
        return partBaseDto;
    }

    protected Resp partBaseToPartBasePageResp(Entity entity) {
        if ( entity == null ) {
            return null;
        }

       	//具体参考上面代码

        return partBasePageResp;
    }
}

结论

通过使用 MapStruct 工具,减少使用反射的次数,同时极大提升代码可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值