Dozer是java Bean到Java Bean的映射器,它以递归方式将数据从一个对象复制到另一个对象。使用这个工具可以将一个对象的所有属性值转给另一个对象,而不需要再重复调用set和get方法
Dozer的使用(Spring Boot)
1.首先要引入Dozer的坐标
<!--引入dozer的starter坐标-->
<dependency>
<groupId>com.github.dozermapper</groupId>
<artifactId>dozer-spring-boot-starter</artifactId>
<version>6.5.0</version>
</dependency>
2.让后创建两个用于测试的实体类,UserEntiy和UserDTO。这两个实体类中的大部分属性是完全一致的,但有个别属性不同。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
private String name;
private int age;
private String addr;
private Date birthday;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserEntity {
private String name;
private int age;
private String address;
private String birthday;
}
3.创建dozer的全局配置文件:dozerConfig.xml 。这个文件的目录位置可以随意设置,我放在了resources目录下:
<?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">
<!--
全局配置:
<date-format>表示日期格式
-->
<configuration>
<date-format>yyyy-MM-dd</date-format>
</configuration>
</mappings>
4.配置dozer的映射文件,即配置UserEntity类和UserDto类之间属性的映射关系。只有配置了这个文件,dozer才知道UserEntity中的address映射到UserDto中的addr属性上等。两个类中,属性名相同的属性可以不配置映射关系,可以自动映射。我将这个文件命名为dozerMapper.xml也放在了resources目录下
<?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">
<!--描述两个类中属性的对应关系,对于两个类中同名的属性可以不映射-->
<!--map-id指定映射标识,即给这个映射关系设置了一个ID。后面可以通过这个ID来确定使用这个映射关系-->
<mapping date-format="yyyy-MM-dd" map-id="user">
<class-a>com.hrm.dozer.UserDto</class-a>
<class-b>com.hrm.dozer.UserEntity</class-b>
<field>
<!--表示UserDto中的addr映射到UserEntity中的address-->
<a>addr</a>
<b>address</b>
</field>
</mapping>
</mappings>
5.在spring boot配置文件中,配置dozer的全局配置文件和映射配置文件。让spring知道dozer的相关配置文件在哪里。
dozer:
mapping-files:
- classpath:dozerConfig.xml
- classpath:dozerMapper.xml
6.编写测试方法进行测试
@Autowired
private Mapper mapper; //使用mapper对象可以完成两个对象之间的属性复制
@Test
public void testDozer(){
/*
* 先创建一个UserEntity对象
* */
UserEntity user = new UserEntity("UserDto",18,"HF","2022-08-28");
/*
* 使用mapper的map方法,
* 第一个参数是被映射的对象
* 第二个参数是需要被映射到的对象
* 第三个参数是映射配置文件中的map-id,表示使用map-id对应的映射关系进行映射
* 返回值是 被映射到的对象
* */
UserDto map = mapper.map(user, UserDto.class,"user");
System.out.println(map);
}
- 如果被映射到的对象本身就存在一些属性值,那么映射后这些值将被覆盖
评论 (0)