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值的 ...
随机推荐
- 长乐培训Day6
T1 数列 题目 [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据规模] 如上所述. 解析 身为T1,居然比T4还难......让我怎么办......以下为巨佬题解: 我猜 ...
- 『Python基础』第20节:深浅copy
一. 赋值运算 l1 = [1, 2, 'conan', [11, 22]] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 'conan', [11, 22]] p ...
- oracle-3-Linux-11g安装-静默安装
oracle下载地址:https://www.oracle.com/database/technologies/112010-linx8664soft.html 系统是最小化安装的Centos7.2 ...
- 如何做好PPT
为什么要做ppt 全图型PPT,一张大图做背景,少量的文字---PPT大师Garr Renolds极力推崇的风格 半图型PPT PTT是为了和你的"客户"有效的沟通 好的PPT G ...
- wannafly 挑战赛10 小H和密码
题意:中文题就不解释了 题解: dp[i][j]表示前i 个轮盘 和一个字符串前j 个字符的匹配情况 ,具体的状态转移解释见代码 #include <cstdio> #include &l ...
- Java QuickSelect
Java QuickSelect /** * <html> * <body> * <P> Copyright 1994-2018 JasonInternationa ...
- mvc伪静态
方法一:IIS配置伪静态 方法二:项目配置伪静态 网站配置文件Web.config <system.webServer> <handlers> <add name=&qu ...
- CVPR2014: DeepID解读
上周五就要发的,拖........拖.......拖到现在,文中有不准确的地方,欢迎批评指正. DeepID是一种特征提取的算法,由港中文汤晓鸥团队于2014年提出,发表于CVPR2014.其应用领域 ...
- Java 之 字节输出流[OutputStream]
一.字节输出流 java.io.OutputStream 抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地. 该类中定义了字节输出流的基本共性功能方法. 公性方法: public v ...
- Hystrix原理与实战
Hystrix原理与实战 背景 分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务. 比如:订单服务调用商品服务,商品服务调用库存服务. 对于同步调用,当库存服务不可用时,商品 ...