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,即可看到返回的值,说明这两个对象转换成功。