您好,欢迎来到微智科技网。
搜索
您的当前位置:首页MapStruct 使用

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 的弄混。

@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 工具,减少使用反射的次数,同时极大提升代码可读性。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务