java对象转换
对象转换: 对象的分层涉及到各个层级之间的对象转换(Entity2DTO , DTO2VO, VO2DTO,DTO2Entity等),传统的采用set/get 方法硬编码实现写的代码比较多;或者采用Bean的copy处理性能受影响
新的处理方式:采用工具在可以在编译器动态生成Java实现类,同时可以集成spring的生态体系,纯粹的是面向接口实现方式
实现方式:
项目中需要添加依赖配置
<org.mapstruct.version>
1.3
.
0
.Final</org.mapstruct.version>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
定义接口类设置映射关系
import
com.sinaif.core.dto.UserDto;
import
com.sinaif.core.entity.UserEntity;
import
org.mapstruct.Mapper;
import
org.mapstruct.Mapping;
import
org.mapstruct.Mappings;
import
java.util.List;
/**
* @Author allen_chen
* @Description 用户POJO对象转换接口
* @Date 2019/7/29 11:53
* @Param
* @return
**/
@Mapper
(componentModel =
"spring"
)
public
interface
UserTransfer {
/**
* @Author allen_chen
* @Description eentity转化为dto
* @Date 2019/7/29 11:53
* @Param [userEntity]
* @return com.example.demo.common.base.dto.UserDto
**/
@Mappings
({
@Mapping
(source =
"phone"
,target =
"cellphone"
),
@Mapping
(source =
"id"
,target =
"userId"
)
})
public
UserDto entity2Dto(UserEntity userEntity);
/**
* @Author allen_chen
* @Description dto转化为entity
* @Date 2019/7/29 11:53
* @Param [dto]
* @return com.example.demo.common.base.entity.UserEntity
**/
@Mappings
({
@Mapping
(source =
"cellphone"
,target =
"phone"
)
})
public
UserEntity dto2Entity(UserDto dto);
@Mappings
({
@Mapping
(source =
"cellphone"
,target =
"phone"
)
})
public
List<UserEntity> listDto2ListEntity(List<UserDto> dtoList);
@Mappings
({
@Mapping
(source =
"phone"
,target =
"cellphone"
)
})
public
List<UserDto> ListEntity2ListDto( List<UserEntity> entityList);
}
具体调用方式直接通过spring注入完成调用
@Autowired
UserTransfer userTransfer;
@Test
public
void
testUserEntity2DtoTransfer(){
UserEntity entity =
new
UserEntity();
entity.setName(
"allen"
);
entity.setNickName(
"allen.chen"
);
entity.setCreTime(
new
Date());
entity.setId(50L);
entity.setPhone(
"135060309"
);
UserDto dto = userTransfer.entity2Dto(entity);
Assert.assertNotNull(dto);
Assert.assertEquals(
"allen"
,dto.getName());
}
@Test
public
void
testUserDto2EntityTransfer(){
UserDto dto =
new
UserDto();
dto.setName(
"allen"
);
dto.setNickName(
"allen.chen"
);
UserEntity entity = userTransfer.dto2Entity(dto);
Assert.assertNotNull(entity);
Assert.assertEquals(
"allen"
,entity.getName());
}
- 注意事项:
1) 如果项目中有用到swagger的需要排除下依赖:
<exclusions> <exclusion> <artifactId>mapstruct</artifactId> <groupId>org.mapstruct</groupId> </exclusion> </exclusions> |
2)更多使用eclipse IDEA 工具需要参考官网地址:http://mapstruct.org/documentation/ide-support/
java对象转换的更多相关文章
- Java对象转换成xml对象和Java对象转换成JSON对象
1.把Java对象转换成JSON对象 apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串.也可以把JavaBean转换成JSON字符串. json-lib的核心 ...
- JAVA对象转换JSON
1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码 代码如下: JSONArray array = JSONArray.fromObject(userlist); String ...
- FastJson、Jackson、Gson进行Java对象转换Json细节处理
前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...
- FastJson、Jackson、Gson进行Java对象转换Json的细节处理
前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...
- 总结学习! xml与java对象转换 --- JDK自带的JAXB(Java Architecture for XML Binding)
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...
- jackson 进行json与java对象转换 之三
2.测试类,没用Junit,用Main()方法输出. package test; import java.io.IOException; import java.util.ArrayList; imp ...
- jxcel - 好用的Excel与Java对象转换工具
更多精彩博文,欢迎访问我的个人博客 Jxcel简介 Jxcel是一个支持Java对象与Excel(目前仅xlsx.xls)互相转换的工具包. 项目地址:https://github.com/jptan ...
- xml-mapping xml 与 java 对象转换映射框架,像 XStream 一样优雅地读写xml
xml xml 是 java 实现的 xml 框架. 希望以最优雅的方式进行 xml 和 java 之间的转换处理,一行代码搞定一切. 特点 对象的和 xml 的互相映射 支持注解 @Alias 指定 ...
- Java对象转换Json的细节处理
一.fastJson 1.fastJson在转换java对象为json的时候,默认是不序列化null值对应的key的 也就是说当对象里面的属性为空的时候,在转换成json时,不序列化那些为null值的 ...
随机推荐
- 024 Android 自定义样式对话框(AlertDialog)
1.AlertDialog介绍 AlertDialog并不需要到布局文件中创建,而是在代码中通过构造器(AlertDialog.Builder)来构造标题.图标和按钮等内容的. 常规使用步骤(具体参见 ...
- 过滤器( filter )的使用
转自:https://www.jianshu.com/p/2ea2b0e4d1f2 过滤器通常 在 web 服务端用的比较多,有要功能 在客户端的请求访问后端资源之前,拦截这些请求. 在服务器的响应发 ...
- Word 固定行间距公式图片显示不全、Word Eculid 字体导致行间距过大、Word 行间距过大
1. 前言 1.有些文章行间距要求是固定值,比如,固定值15磅,但是这样会导致有些公式.图片显示不全.例如下图: 2.Euclid这个字体很容易导致行间距超大. 2. 解决方案 1.把固定值15磅改为 ...
- Python20之全局变量和局部变量
一.局部变量和全局变量 局部变量:是指在函数体内定义的变量,作用域只在该函数体内部 全局变量:是指在函数体外定义的变量,作用域是整个代码段 所以在函数体内可以直接访问全局变量而不可以在函数体外访问局部 ...
- 剑指offer44:翻转单词顺序列
1 题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“stude ...
- leetcode 2019.10.29 首次破百
刷题首次破百,记录一下自己成长的历程. 仍在路上,会慢慢变强的~
- 利用Python进行数据分析 第6章 数据加载、存储与文件格式(2)
6.2 二进制数据格式 实现数据的高效二进制格式存储最简单的办法之一,是使用Python内置的pickle序列化. pandas对象都有一个用于将数据以pickle格式保存到磁盘上的to_pickle ...
- oracle-3-Linux-11g安装-静默安装
oracle下载地址:https://www.oracle.com/database/technologies/112010-linx8664soft.html 系统是最小化安装的Centos7.2 ...
- Asp.Net Core 使用 MediatR
Asp.Net Core 使用 MediatR 项目中使用了CQRS读写分离,增删改 的地方使用了 MediatR ,将进程内消息的发送和处理进行解耦.于是便有了这篇文章,整理并记录一下自己的学习.遇 ...
- UI5-技术篇-Implementing Expand Entity/Entity Set
转载:https://blogs.sap.com/2014/07/18/implementing-expand-entityentity-set/ Requirement Considering a ...