第三节MapStruct翻译--Defining a mapper
第三节MapStruct--Defining a mapper
在这一章节你将学到如何用mapstruct和它的一些必要的操作选项来定义一个bean mapper。
3.1 Basic mappings
创建一个java接口类,使用必要的方法和注解来创建一个简单的mapper,其中要用到org.mapstruct.Mapper包的注解:
例6:
@Mapper
public interface CarMapper {
  @Mappings({
  @Mapping(source = "make", target = "manufacturer"),
  @Mapping(source = "numberOfSeats", target = "seatCount")
  })
  CarDto carToCarDto(Car car);
  @Mapping(source = "name", target = "fullName")
  PersonDto personToPersonDto(Person person);
}
@Mapper注解可以致使MapStruct代码生成器在编译时期创建一个CarMapper接口的实现类。
在生成的实现方法中,会从Car类源中读取所有可读属性字段,复制并绑定到目标类CarDto中。如果等价属性间(类源--目标类)出现字段变量名不同的情况,我们可以使用@Mapper注解来自定义指定。
为了更好的理解MapStruct都做了些什么,可以查看接下来的例子:
例7.MapStruct生成的代码(carToCarDto)
// GENERATED CODE
public class CarMapperImpl implements CarMapper {
  @Override
  public CarDto carToCarDto(Car car) {
    if ( car == null ) {
      return null;
    }
    CarDto carDto = new CarDto();
    if ( car.getFeatures() != null ) {
      carDto.setFeatures( new ArrayList<String>( car.getFeatures() ) );
    }
    carDto.setManufacturer( car.getMake() );
    carDto.setSeatCount( car.getNumberOfSeats() );
    carDto.setDriver( personToPersonDto( car.getDriver() ) );
    carDto.setPrice( String.valueOf( car.getPrice() ) );
    if ( car.getCategory() != null ) {
      carDto.setCategory( car.getCategory().toString() );
    }
    carDto.setEngine( engineTtoEngineDto( car.getEngine() ) );
    return carDto;
  }
  @Override
  public PersonDto personToPersonDto(Person person) {
  	//...
  }
  private EngineDto engineToEngineDto(Engine engine) {
    if ( engine == null ) {
    	return null;
    }
    EngineDto engineDto = new EngineDto();
    engineDto.setHorsePower(engine.getHorsePower());
    engineDto.setFuel(engine.getFuel());
    return engineDto;
  }
}
通常MapStruct的代码生成策略是尽可能多的查看用户的自定义策略。特别是这意味着所有的这些值都将有计划的通过getter/seter方法从源类复制到目标类,而不是通过反射或者其他方式。
从例子中可以发现,所有通过注解指定的映射都被MapStruct作用到了代码生成中。如果映射属性的类型在源和目标实体中是不同的,MapStruct将要么应用自动转换,要么可选地调用/创建另一映射方法。当且仅当源和目标属性是简单的bean属性(即变量类型不是集合或字典类型),MapStruct才会创建一个新映射。
MapStruct映射策略中包括源和目标类型的所有公共属性,也包括在父类上声明的属性。
3.2. Adding custom methods to mappers(在映射器中添加自定义方法)
后面添加
第三节MapStruct翻译--Defining a mapper的更多相关文章
- 推荐一个 Java 实体映射工具 MapStruct
		
声明: 1.DO(业务实体对象),DTO(数据传输对象). 2.我的代码中用到了 Lombok ,不了解的可以自行了解一下,了解的忽略这条就好. 在一个成熟的工程中,尤其是现在的分布式系统中,应用与应 ...
 - Java实体映射工具MapStruct的使用
		
官网地址:http://mapstruct.org/ MapStruct 是一个代码生成器,简化了不同的 Java Bean 之间映射的处理,所谓的映射指的就是从一个实体变化成一个实体.例如我们在实际 ...
 - MapStruct 解了对象映射的毒
		
前言 MVC模式是目前主流项目的标准开发模式,这种模式下框架的分层结构清晰,主要分为Controller,Service,Dao.分层的结构下,各层之间的数据传输要求就会存在差异,我们不能用一个对象来 ...
 - Consider defining a bean of type 'com.*.*.mapper.*.*Mapper' in your configuration.
		
@Mapper 不能加载的问题 Consider defining a bean of type 'com.*.*.mapper.*.*Mapper' in your configuration. 添 ...
 - 【spring boot】mybatis启动报错:Consider defining a bean of type 'com.newhope.interview.dao.UserMapper' in your configuration. 【Mapper类不能被找到】@Mapper 和@MapperScan注解的区别
		
启动报错: 2018-05-16 17:22:58.161 ERROR 4080 --- Disconnected from the target VM, address: '127.0.0.1:50 ...
 - Consider defining a bean of type 'XX.XX.XX.XX.mapper.XXMapper' in your configuration.
		
今天构建一个springboot 项目,采用mybatis+mysql 然后就出现了这种错误....浪费我半天时间 Description: Field loginLogMapper in com.g ...
 - mapstruct 实体转换及List转换,@Mapper注解转换
		
本文参考 https://blog.csdn.net/u012373815/article/details/88367456 主要是为了自己使用方便查询. 这些都是我平时用到了,大家有什么好方法或者有 ...
 - 外文翻译 《How we decide》赛场上的四分卫 第三节
		
本书导言翻译 本章第二节 1982年,一位名叫Elliot的病人走进了神经科学家Antonio Damasio的办公室.几个月之前,一个小的肿瘤在它的大脑中被切除,切除点与大脑额叶非常靠近.在手术之前 ...
 - springboot 启动报错Consider defining a bean of type 'com.example.springbootdruid.mapper.UserMapper' in your configurati
		
一.问题 springboot项目启动时报错: Field userMapper in com.example.springbootdruid.service.impl.UserServiceImpl ...
 
随机推荐
- FMDB数据迁移
			
https://www.jianshu.com/p/736b00b3a1e1 2017.08.25 15:44* 字数 500 阅读 1474评论 0喜欢 4 公司项目中,一般都需要做数据持久化,我们 ...
 - VMwara虚拟机三种网络模式
			
虚拟机:虚拟机是能够让用户在一台物理机上模拟出多个操作系统的软件其本质是通过中间层实现计算机资源的管理和再分配让系统资源的利用率最大化VMware即是一款虚拟机软件注意:虚拟机和操作系统的区别,虚拟机 ...
 - vue2 Excel导出数据 js-xlsx的使用
			
vue2 Excel导出数据 js-xlsx的使用 https://www.jianshu.com/p/ea115a8e9107 小世界最温暖 关注 2018.11.19 16:08 字数 280 阅 ...
 - HTTP协议调试工具汇总
			
前言 本文收集了大量抓包工具,近40款,涵盖了各种开发语言(Java,C#,Delphi,C,C++,Objective-C,Node.js,Go,Python).各类前端(GUI,TUI,CUI,W ...
 - Day9 - D - Piggy-Bank POJ - 1384
			
Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. ...
 - Java导出Excel(项目实战Demo)
			
Controller 层 /** * 考勤机刷卡明细导出Excel * * @throws Exception */ // @RequiresPermissions("report:Expo ...
 - C# 篇基础知识7——字符串
			
文字是信息的主要表达方式,因此文字处理是计算机的一项重要功能之一.现在来深入研究C#中字符串的各种特性.正则表达式的基本概念以及如何用正则表达式进行文本匹配. 1.char结构 C#中的字符用Syst ...
 - Redis集合类型
			
集合是元素无序且唯一的列表 命令 增加元素 SADD key member [member ...] > SADD letters a (integer) 1 > SADD letters ...
 - [转载]JDK自带的实用工具——native2ascii.exe
			
做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,原因是编码方式的不一致.native2ascii是sun java sdk提供的一个工具.用来将别的文本类文件(比如*.txt, ...
 - 【Luogu4448】 [AHOI2018初中组]球球的排列
			
题意 有 \(n\) 个球球,每个球球有一个属性值 .一个合法的排列满足不存在相邻两个球球的属性值乘积是完全平方数.求合法的排列数量对 \(10^9+7\) 取膜. \(n\le 300\) (本题数 ...