其他分享
首页 > 其他分享> > @nartc/automapper 的基础使用

@nartc/automapper 的基础使用

作者:互联网

此文档用于简单记述!!!

详情请看官方文档

 

官方文档:https://automapper.netlify.app/docs/usages/init/create-map

Demo地址:https://codesandbox.io/s/automapper-demo-latest-forked-qu8xl?file=/src/index.ts

 

安装依赖  :

npm install @nartc/automapper 

npm install --save reflect-metadata

 

使用步骤:

1、在文件中引用插件

import { Mapper, AutoMapper, mapFrom, ProfileBase, mapWith, ignore } from '@nartc/automapper'
  import 'reflect-metadata';

 

2、给需要映射的字段添加@AutoMap()

export class CustomShowScopeResponse {   @AutoMap()   targetId!: string;   @AutoMap()   targetName!: string; }   export class BaseData {   @AutoMap()   id: string;   @AutoMap()   name: string; }

 

3、配置关系

1)先通过 createMap 创建两个实体之间的关联关系,createMap(数据源类型 , 转换后类型)

2)通过 forMember 创建两个字段之间的关联关系,forMember(指向类型字段 ,mapFrom(数据来源字段))

export class CustomShowScopeProfile extends ProfileBase {
  constructor(mapper: AutoMapper) {
    super();

    mapper
      .createMap(CustomShowScopeResponse, BaseData)
      .forMember(
        u => u.id,
        mapFrom(t => t.targetId),
      )
      .forMember(
        u => u.name,
        mapFrom(t => t.targetName),
      );
  }
}
若两个类之间需互相映射的字段名相同,则只需在实体字段上添加 @AutoMap() 即可,无需再专门去声明两个字段之间的关系

 

4、在全局添加关系配置

Mapper.addProfile(CustomShowScopeProfile);

 

5、获取转换对象

1)如果是实例化对象,那么可直接如下方式获取转换对象

const a = new CustomShowScopeResponse();
a.targetId = '11';
a.targetName = '22';
const ret = Mapper.map(data.customShowScope, BaseData);

2)如果非实例化对象,需要在map时声明源数据类型获取

const ret = Mapper.map(data.customShowScope[0], BaseData, CustomShowScopeResponse);

3)数组对象可用mapArray获取,但同样需要声明源数据类型

const ret = Mapper.mapArray(data.customShowScope, BaseData, CustomShowScopeResponse);

注:如果配置文件跟使用文件不是在同一个文件,那么需要在使用的那个文件中引用配置文件,否则关系配置不生效 

 

实例:

1、字段类型为对象

1)在所需映射字段声明类型

 

 2)在配置文件中建立关系

这个时候就不用mapFrom,而是用mapWith了,

 .forMember( 数据源字段 , mapWith(数据源类型 , 指向字段))

 

2.在映射时忽略某个字段  

通过 ignore() 表明忽略此字段来源

 

标签:nartc,mapFrom,CustomShowScopeResponse,AutoMap,基础,forMember,automapper,BaseData
来源: https://www.cnblogs.com/xiaoxiaomini/p/14090466.html