eclipse使用mapstruct_MapStruct使用学习
MapStruct通过一些接口定义,能自动生成实现类,将一个类转换为另一个类。
引用
1.3.1.Final
...
org.mapstruct
mapstruct
${org.mapstruct.version}
...
org.apache.maven.plugins
maven-compiler-plugin
3.5.1
1.8
1.8
org.mapstruct
mapstruct-processor
${org.mapstruct.version}
这个依赖有两个问题
不支持lombok的@Data等注解
如果接口引用的类通过@Data标记,由于标记生成getter/setter等方法,但是在生成mapstruct mapper类时看不到,会导致编译找不到属性的问题。
解决方法:引入mapstruct-processor,同时去掉plugin中的annotationProcessorPaths:
...
org.mapstruct
mapstruct-processor
1.3.1.Final
provided
...
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
...
Spring中无法通过@Autowired注入接口
这是因为生成的Mapper实现类,没有被标注@Component,通过添加maven编译参数defaultComponentModel可以解决:
...
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
-Amapstruct.defaultComponentModel=spring
...
修改以后,我在eclipse中没有自动重新编译,需要clean再重新编译才生效。
引用Mapper
INSTANCE方式
接口中定义一个单例,其他地方引用,官方讲的比较清楚:
@Mapper
public interface CarMapper {
CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
CarDto carToCarDto(Car car);
}
//引用Mapper
Car car = ...;
CarDto dto = CarMapper.INSTANCE.carToCarDto( car );
通过@Autowired依赖注入
需要前面配置的defaultComponentModel=spring,才能在代码中注入:
@Autowired
CarMapper carMapper;
其实上面的配置时全局的,也可以在mapper定义中,增加标记:
@Mapper(componentModel = "spring")
public interface CarMapper {
CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
CarDto carToCarDto(Car car);
}
这样也行,只不过需要一个一个的Mapper都添加,不是那么方便了。
使用
可以转换复杂的结构类型,默认是同名的属性进行转换的。
按照官方文档的说明,生成的Mapper代码也是尽量符合手写代码,通过getter/setter设置,没有使用反射,这也是为什么通过lombok添加getter/setter会生成不成功的原因。
也支持通过注解,将不同名字的类型进行自动转换。
我实验的代码:
//源类型
@Data
public class TbUserCustomDO {
private List users;
private String fieldA;
private String field2;
}
//TbUser也是一个自定义类
@Data
public class TbUser implements Serializable {
private Integer id;
private String username;
private String password;
private String name;
private Integer age;
private Integer sex;
private Date birthday;
private Date created;
private Date updated
}
//目的类
@Data
public class TbUserDemoDTO {
private List users;
private String field1;
private String field2;
}
//这里TbUserDTO与源类中的TbUser不完全相同(少一些字段),但是注意每个已有字段名称是相同的
public class TbUserDTO {
private Integer id;
private String username;
private String password;
private String name;
private Integer age;
private Integer sex;
private Date birthday;
}
//Mapper类
@Mapper
public interface TbUserCustomConverter {
//这里把fieldA对应到field1,因为名称不同
@Mapping(source = "fieldA", target = "field1")
TbUserDemoDTO doToDTO(TbUserCustomDO cDo);
}
//注入Mapper
@Autowired
TbUserCustomConverter tbUserCustomConverter;
...
//使用,这里List和属性都能成功转换
TbUserCustomDO cDo = ...
TbUserDemoDTO dto = tbUserCustomConverter.doToDTO(cDo);
eclipse使用mapstruct_MapStruct使用学习相关推荐
- eclipse maven配置_Gradle学习记录015 声明仓库,检查依赖,管理依赖的配置
本片由三部分组成,第一部分声明仓库的参考链接如下: https://docs.gradle.org/current/userguide/repository_types.html 第二部分检查依赖的依 ...
- eclipse功能template(模板)学习。e.g : 快速在代码中插入时间戳
说些题外话. 自己属于半路出家入行码农的类型,基础算不上好,需要大量的时间夯实. 幸好,赶上网易云课堂开放.可以花费些时间,来好好学习一下. 在此,也是特别推荐有心学习coding的同学,可以去看看. ...
- eclipse插件大全整理学习
Eclipse Web Tools Platform(WTP) 地址:http://download.eclipse.org/webtools/ WTP十分强大,支持HTML, JavaScript, ...
- eclipse maven打包_Maven 学习
1 Maven 简介 Maven 使用项目对象模型(POM,Project Object Model) 的概念,可以通过一小段描述信息来管理项目的构建.报告和文档的软件项目管理工具 2 Maven 的 ...
- eclipse开发android入门学习
1.device窗口 查看android运行情况的窗口和DDMS内容一致(通过keymap映射eclipse快捷键到vs的快捷操作) 2.android.bat 在adb路径下运行adb操作,实现an ...
- Java JDK安装与配置以及Eclipse下载(Java 学习预备工作,针对windows用户学习者)
目录 JDK下载 Path配置 CLASSPATH配置 验证是否配置成功 Eclipse下载 JDK下载 下载地址:Java Downloads | Oracle 下载完以后双击安装即可. Path配 ...
- eclipse paho java_Eclipse paho学习笔记
Eclipse Paho java 支持java和android 两个客户端异步和同步, MqttAsyncClient,MqttClient 其中 后者是前者的包装同步器,特效除了5.0都支持 有两 ...
- JavaWeb—监听器—Eclipse版动力节点学习笔记
JavaWeb学习笔记 监听器 Listener 哔哩哔哩蛙课网[动力节点]JavaWeb-Eclipse版学习视频网址 解释 归属 备注 ServletRequestListener Request ...
- eclipse使用mapstruct_MapStruct快速入门
MapStruct是一个代码生成器,简化了不同的Java Bean之间映射的处理,所以映射指的就是从一个实体变化成一个实体.例如我们在实际开发中,DAO层的实体和一些数据传输对象(DTO),大部分属性 ...
最新文章
- tf.io.gfile.glob 遍历文件
- 让CentOS 5.5支持ext4
- angularjs 让当前路由重新加载_Spring Cloud Gateway的动态路由怎样做?集成Nacos实现很简单...
- Scrapy-redis实现分布式爬取的过程与原理
- Axis2 WebService(配置、发布、调用)
- 嵌入式常见笔试题总结(2)
- Arcgis javascript那些事儿(十六)——GP服务的发布与使用
- 语音识别芯片的工作原理和分类
- 《算法设计与分析》黄宇编著 课后习题参考答案
- 标注的尺寸避让lisp_AutoCAD中尺寸公差的自动标注 一短小AutoLISP程序轻松实现.doc...
- python3 如何对一个数进行开方(3种方法)
- CMake 常用方法
- GitHub 中超过3.5万开源代码被投毒
- 【No7.】Android 像素转换工具
- 二分图的最大匹配-解决匹配问题
- C# 以GET或Post方式请求Web地址
- 鲁大师测试软件的算法,鲁大师是如何检测内存的?检测内存的方法
- 打开oracle dmp,dmp文件怎么打开?dmp是什么文件?
- 工作流中实现一个节点多个节点的顺序审批
- 现代远程教育入学指南(石油大学)--高等数学(二)在线作业