MapStruct

MapStruct是什么

MapStruct是一个代码生成器,用于简化Java实体类型之间转换,使用时只需定义Mapper映射接口,会自动为我们生成转换代码。本质上MapStruct是通过普通方法调用进行字段映射,快速、类型安全、简单、易于理解。

主页: https://mapstruct.org/

GitHub: https://github.com/mapstruct/mapstruct/

Demo: https://github.com/mapstruct/mapstruct-examples

MapStruct使用方式

1.1 Maven坐标

<properties>
  <org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
</properties>

<dependencies>
  <dependency>
  <groupId>org.mapstruct</groupId>
  <artifactId>mapstruct</artifactId>
  <version>${org.mapstruct.version}</version>
  </dependency>
</dependencies>

<build>
  <plugins>
  <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
  <configuration>
  <source>1.8</source>
  <target>1.8</target>
  <annotationProcessorPaths>
  <path>
  <groupId>org.mapstruct</groupId>
  <artifactId>mapstruct-processor</artifactId>
  <version>${org.mapstruct.version}</version>
  </path>
  </annotationProcessorPaths>
  </configuration>
  </plugin>
  </plugins>
</build>

1.2 定义基础转换类
package com.giser.mp.entmp;

import java.util.List;

/**
*
* 基础转换类,提供几个基本方法,直接继承使用
* 更多的用法需自行实现
* @param <DTO> 目标对象,一般为DTO对象
* @param <ENTITY> 源对象,一般为需要转换的对象
* @param <VO> 目标对象,一般为VO对象
*/
public interface BaseMapStructMapper<DTO, ENTITY, VO> {

   /**
    * 将源对象转换为DTO对象
    * @param e
    * @return D
    */
	DTO entityToDTO(ENTITY e);

   /**
    * 将源对象集合转换为DTO对象集合
    * @param es
    * @return List<D>
    */
   List<DTO> entitiesToDTOList(List<ENTITY> es);

   /**
    * 将源对象转换为VO对象
    * @param e
    * @return V
    */
   VO entityToVO(ENTITY e);

   /**
    * 将DTO对象转换为VO对象
    * @param d
    * @return V
    */
   VO dtoToVO(DTO d);

   /**
    * 将源对象集合转换为VO对象集合
    * @param es
    * @return List<D>
    */
   List<VO> entitiesToVOList(List<ENTITY> es);

   /**
    * 将目标对象转换为源对象
    * @param d
    * @return E
    */
   ENTITY dtoToEntity(DTO d);

   /**
    * 将目标对象集合转换为源对象集合
    * @param ds
    * @return List<E>
    */
   List<ENTITY> dtosToEntityList(List<DTO> ds);
   
}

13 使用时,继承基础转换类,并标注@Mapper注解(org.mapstruct.Mapper)即可
@Mapper(componentModel = "spring")
public interface EarlyEntityMapper extends BaseMapStructMapper<EarlyDto, EarlyEntity, EarlyVo> {
}

1.4 测试

/**
 * @see https://mapstruct.org/
 * @see https://github.com/mapstruct/mapstruct/
 * @see https://github.com/mapstruct/mapstruct-examples
 */
@SpringBootTest(classes = JavaMpApp.class)
@Slf4j
public class MapStructTest {

	@Autowired
	private EarlyEntityMapper earlyEntityMapper;

    @Test
    public void testDto2Ent(){
    	EarlyDto earlyDto = new EarlyDto(1L,"xiangjiao dto",22,null);
        EarlyEntity entity = earlyEntityMapper.dtoToEntity(earlyDto);
        System.out.println(entity);
    }
}

5.编译后的文件

package BOOT-INF.classes.com.giser.mp.entmp;

import com.giser.mp.entity.EarlyDto;
import com.giser.mp.entity.EarlyEntity;
import com.giser.mp.entity.EarlyVo;
import com.giser.mp.entmp.EarlyEntityMapper;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;

@Component
public class EarlyEntityMapperImpl implements EarlyEntityMapper {
  public EarlyDto entityToDTO(EarlyEntity e) {
    if (e == null)
      return null; 
    EarlyDto earlyDto = new EarlyDto();
    earlyDto.setId(e.getId());
    earlyDto.setName(e.getName());
    earlyDto.setAge(e.getAge());
    earlyDto.setEmail(e.getEmail());
    return earlyDto;
  }
  
  public List<EarlyDto> entitiesToDTOList(List<EarlyEntity> es) {
    if (es == null)
      return null; 
    List<EarlyDto> list = new ArrayList<>(es.size());
    for (EarlyEntity earlyEntity : es)
      list.add(entityToDTO(earlyEntity)); 
    return list;
  }
  
  public EarlyVo entityToVO(EarlyEntity e) {
    if (e == null)
      return null; 
    EarlyVo earlyVo = new EarlyVo();
    earlyVo.setId(e.getId());
    earlyVo.setName(e.getName());
    earlyVo.setAge(e.getAge());
    earlyVo.setEmail(e.getEmail());
    return earlyVo;
  }
  
  public EarlyVo dtoToVO(EarlyDto d) {
    if (d == null)
      return null; 
    EarlyVo earlyVo = new EarlyVo();
    earlyVo.setId(d.getId());
    earlyVo.setName(d.getName());
    earlyVo.setAge(d.getAge());
    earlyVo.setEmail(d.getEmail());
    return earlyVo;
  }
  
  public List<EarlyVo> entitiesToVOList(List<EarlyEntity> es) {
    if (es == null)
      return null; 
    List<EarlyVo> list = new ArrayList<>(es.size());
    for (EarlyEntity earlyEntity : es)
      list.add(entityToVO(earlyEntity)); 
    return list;
  }
  
  public EarlyEntity dtoToEntity(EarlyDto d) {
    if (d == null)
      return null; 
    EarlyEntity earlyEntity = new EarlyEntity();
    earlyEntity.setId(d.getId());
    earlyEntity.setName(d.getName());
    earlyEntity.setAge(d.getAge());
    earlyEntity.setEmail(d.getEmail());
    return earlyEntity;
  }
  
  public List<EarlyEntity> dtosToEntityList(List<EarlyDto> ds) {
    if (ds == null)
      return null; 
    List<EarlyEntity> list = new ArrayList<>(ds.size());
    for (EarlyDto earlyDto : ds)
      list.add(dtoToEntity(earlyDto)); 
    return list;
  }
}

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值