对象转换: 对象的分层涉及到各个层级之间的对象转换(Entity2DTO , DTO2VO, VO2DTO,DTO2Entity等),传统的采用set/get 方法硬编码实现写的代码比较多;或者采用Bean的copy处理性能受影响

新的处理方式:采用工具在可以在编译器动态生成Java实现类,同时可以集成spring的生态体系,纯粹的是面向接口实现方式

实现方式:

  1. 项目中需要添加依赖配置

    <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>
  2. 定义接口类设置映射关系

    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);
    }
  3. 具体调用方式直接通过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());
    }
  4. 注意事项:

1) 如果项目中有用到swagger的需要排除下依赖:

<exclusions>
    <exclusion>
        <artifactId>mapstruct</artifactId>
        <groupId>org.mapstruct</groupId>
    </exclusion>
</exclusions>

2)更多使用eclipse IDEA 工具需要参考官网地址:http://mapstruct.org/documentation/ide-support/

java对象转换的更多相关文章

  1. Java对象转换成xml对象和Java对象转换成JSON对象

    1.把Java对象转换成JSON对象 apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串.也可以把JavaBean转换成JSON字符串. json-lib的核心 ...

  2. JAVA对象转换JSON

    1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码 代码如下: JSONArray array = JSONArray.fromObject(userlist); String ...

  3. FastJson、Jackson、Gson进行Java对象转换Json细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  4. FastJson、Jackson、Gson进行Java对象转换Json的细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  5. 总结学习! xml与java对象转换 --- JDK自带的JAXB(Java Architecture for XML Binding)

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...

  6. jackson 进行json与java对象转换 之三

    2.测试类,没用Junit,用Main()方法输出. package test; import java.io.IOException; import java.util.ArrayList; imp ...

  7. jxcel - 好用的Excel与Java对象转换工具

    更多精彩博文,欢迎访问我的个人博客 Jxcel简介 Jxcel是一个支持Java对象与Excel(目前仅xlsx.xls)互相转换的工具包. 项目地址:https://github.com/jptan ...

  8. xml-mapping xml 与 java 对象转换映射框架,像 XStream 一样优雅地读写xml

    xml xml 是 java 实现的 xml 框架. 希望以最优雅的方式进行 xml 和 java 之间的转换处理,一行代码搞定一切. 特点 对象的和 xml 的互相映射 支持注解 @Alias 指定 ...

  9. Java对象转换Json的细节处理

    一.fastJson 1.fastJson在转换java对象为json的时候,默认是不序列化null值对应的key的 也就是说当对象里面的属性为空的时候,在转换成json时,不序列化那些为null值的 ...

随机推荐

  1. (8)Spring Boot 与数据访问

    文章目录 简介 整合基本的JDBC与数据源 整合 druid 数据源 整合 mybatis 简介 对于数据访问层,无论是 SQL 还是 NOSQL ,Spring Boot 默认都采用整合 Sprin ...

  2. Linux基础-12-yum管理软件包

    1. yum的功能 yum是Yellow dog Updater, Modified的缩写,目的就是为了解决RPM的依赖关系的问题,方便使用者进行软件的安装.升级等等工作. 2. 光盘挂载和镜像挂载 ...

  3. 15 飞机大战:pygame入门、python基础串连

    0 pygame模块的导入 import pygame导入pygame包 使用pygame.init()导入pygame的所有模块.只有导入模块pygame才能使用. 使用pygame.quit()卸 ...

  4. Spring AOP日志实现(二)--获取访问者IP及访问路径

    获取类及方法上的@RequestMapping注解: 应该是不等于: 获取访问者的ip地址,首先配置一个监听器: 配置完监听器后,就可以在类中注入一个HttpServletRequest: 获取ip:

  5. 在论坛中出现的比较难的sql问题:15(生成动态删除列语句 分组内多行转为多列)

    原文:在论坛中出现的比较难的sql问题:15(生成动态删除列语句 分组内多行转为多列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 1.如果去掉这个临时表中合计为0 ...

  6. Powershell学习笔记:(一)、初识Powershell

    什么是Powershell? MSDN上的说明是:PowerShell 是构建于 .NET 上基于任务的命令行 shell 和脚本语言. PowerShell 可帮助系统管理员和高级用户快速自动执行用 ...

  7. 翻译-在10行代码之内创建容器化的.net core应用

    本文翻译自Hans Kilian的文章 Creating a containerized .NET core application in less than 10 lines of code htt ...

  8. 转 使用IParameterInspector, IOperationBehavior,Attribute(参数检查器、操作行为接口和标签)扩展WCF操作行为

    public class EntryIdInspector : IParameterInspector { public int intParamIndex { get; set; } string ...

  9. 多进程,多线程,使用sqlalchemy 创建引擎(单例模式),闭包装饰器承载数据库会话,装饰模型类的类方法

    python 多进程,多线程,使用 sqlalchemy 对数据库进行操作 创建引擎 & 获取数据库会话: 使用类的方式,然后在对象方法中去创建数据库引擎(使用单例,确保只创建一个对象,方法里 ...

  10. Java内存模型之分析volatile

    前篇博客[死磕Java并发]—–深入分析volatile的实现原理 中已经阐述了volatile的特性了: volatile可见性:对一个volatile的读,总可以看到对这个变量最终的写: vola ...