dozer(对象转换工具)

1.概述 

即在JavaBean到JavaBean之间进行递归数据复制,并且这些JavaBean可以是不同的复杂的类型。Dozer把对象中名称相同的属性进行复制,对于名称不相同或类型不一样,则可以在xml中进行定义。

其最大的优势在于对象中不同的名称之前只要配置了映射,就可以进行复制,减少大量使用get和set方法。而BeanUtils.copyProperties只能复制对象中名称且类型相同的属性。

2.实战演练

2.1环境准备

新建一个SpringBoot的项目,导入需要的依赖

<dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
</dependency>
 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
</dependency>

2.2引入dozer

1)导入依赖

<dependency>
    <groupId>com.github.dozermapper</groupId>
    <artifactId>dozer-spring-boot-starter</artifactId>
    <version>6.5.2</version>
</dependency>

2)创建对象UserDto,作为源对象

@Data
public class UserDto {

    private Integer userId;

    private String userName;

    private String address;

    private Integer age;

    private String birthday;
}

3)创建对象UserEntity,作为目标对象

@Data
public class UserEntity {

    private Integer id;

    private String name;

    private String addr;

    private Integer age;

    private Date birthday;
}

4)创建dozer全局的配置文件

在资源目录下新建dozer目录,新建文件dozer-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://dozermapper.github.io/schema/bean-mapping"
       xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping
                           http://dozermapper.github.io/schema/bean-mapping.xsd">

    <!--全局配置-->
    <configuration>
        <date-format>yyyy-MM-dd</date-format>
    </configuration>
</mappings>

5)创建对象映射文件。在dozer中新建user.dozer.xml:

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://dozermapper.github.io/schema/bean-mapping"
          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping
                           http://dozermapper.github.io/schema/bean-mapping.xsd">

    <!--配置对象中属性的对应关系,相同的属性无需映射-->
   <mapping date-format="yyyy-MM-dd">
       <class-a>com.zys.example.entity.UserEntity</class-a>
       <class-b>com.zys.example.entity.UserDto</class-b>
       <field>
           <a>id</a>
           <b>userId</b>
       </field>
       <field>
           <a>name</a>
           <b>userName</b>
       </field>
       <field>
           <a>addr</a>
           <b>address</b>
       </field>
   </mapping>
</mappings>

6)新建接口UserController。由于需要Spring管理,直接使用controller进行测试:

package com.zys.example.controller;

import com.github.dozermapper.core.Mapper;
import com.zys.example.entity.UserDto;
import com.zys.example.entity.UserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController1 {

    @Autowired
    private Mapper mapper;

    @GetMapping("/send")
    public UserEntity sendMsg(Integer id, String msg) {
        UserDto userDto = new UserDto();
        userDto.setUserId(123);
        userDto.setUserName("admin");
        userDto.setAddress("武汉");
        userDto.setAge(20);
        userDto.setBirthday("2001-12-15");
        UserEntity user = mapper.map(userDto, UserEntity.class);
        return user;
    }
}

7)测试。启动项目,输入http://localhost:8080/user/send,即可看到返回的值,说明这两个对象转换成功。

就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !
原文地址:https://www.cnblogs.com/zys2019/p/14974592.html