对象转换: 对象的分层涉及到各个层级之间的对象转换(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. [PDF] - 获取 RadioButtonList 控件值的方法

    背景 目标是通过 iTextSharp 读取 PDF 模板,填充内容后以生成新 PDF 文件.利用 福昕PDF编辑器个人版 可以获取到 RadioButtonList 的组名,但是获取不到每一个 Ra ...

  2. Word 下划线无法对齐?用表格替代下划线(论文封面必备)

    1. 前言 在使用Word排版制作合同或者论文封面时,我们可能会使用一些下划线,但是,你在下划线上输入内容后,发现下划线会随着内容而增长,根本无法与上下的下划线对齐.有什么好办法可以解决这一问题呢?其 ...

  3. 剑指offer61:序列化二叉树

    1 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存.序列化可以基于先 ...

  4. 欧拉图Eulerian Graph

    一.节点的度 无向图:节点的度为该节点所连接的边数 有向图:节点的度分为入度和出度. 二.欧拉图定义 具有欧拉回路的图称作欧拉图,具有欧拉路径而无欧拉回路的图称为半欧拉图. 欧拉回路: ​ 通过图中每 ...

  5. golang之new函数

    另一个创建变量的方法是调用用内建的new函数.表达式new(T)将创建一个T类型的匿名变量,初始化为T类型的零值,然后返回变量地址,返回的指针类型为 *T . p := new(int) // p, ...

  6. go context 源码分析

    WithCancel func WithCancel(parent Context) (ctx Context, cancel CancelFunc) { c := newCancelCtx(pare ...

  7. Android--圆角背景style

    <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http: ...

  8. 题解-AtCoder ARC-083F Collecting Balls

    Problem ARC083F 题意概要:给定 \(2n\) 个二维平面上的球,坐标分别为 \((x_i,y_i)\),并给出 \(n\) 个 \(A\)类 机器人 和 \(n\) 个 \(B\)类 ...

  9. django.http.request中QueryDict 对象

    在一个 HttpRequest 对象中, GET 和 POST 属性都是 django.http.QueryDict 的实例. QueryDict 是一个类似于字典的类,专门用来处理用一个键的多值.当 ...

  10. 今日前端框架Vue学习笔记

    在线网页网址http://xingxunxinxi.com/StudentCourse/first.html代码 界面