1、简介

Dozer(http://dozer.sourceforge.net/) 是 Java Bean 到 Java Bean 的映射器,他以递归的方式将数据从一个对象复制到另一个对象。Dozer 支持简单属性映射、双向映射、隐式映射以及递归映射。使用该映射器可以很方便的在项目中进行 pojo、do、vo 之间的转换。

2、入门

2.1 搭建环境

创建一个maven项目,导入下列依赖:

<dependencies><!-- https://mvnrepository.com/artifact/com.github.dozermapper/dozer-core --><dependency><groupId>com.github.dozermapper</groupId><artifactId>dozer-core</artifactId><version>6.5.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version></dependency>
</dependencies>

2.2 创建实体类

创建两个实体类UserUserVO

@Data
public class User {private String name;private Integer age;
}@Data
public class UserVO {private String name;private Integer age;private String loginId;private String pwd;
}

编写测试类

    public static void main(String[] args) {//使用构造器创建映射器Mapper mapper = DozerBeanMapperBuilder.buildDefault();//创建User对象User user = new User();user.setName("张三");user.setAge(23);//第一种方式//UserVO userVO = mapper.map(user, UserVO.class);//第二种方式UserVO userVO = new UserVO();mapper.map(user,userVO);System.out.println(userVO);//UserVO(name=张三, age=23, loginId=null, pwd=null)
}

可以看到,user的name和age都被复制到了userVO中,但是,需要注意的是,二者对应的属性名必须一样,否则无法正常映射。

那么,如果属性名相同,但是类型不同,可以进行映射吗?我们将UserVO的age改为String类型的,再次进行测试:

private String age;

可以发现,是可以进行映射的,那我们再来看一下Dozer在遇到属性名的大小写问题是否依旧可以正常转换呢?我们将UserVo的name属性名改为首字母大写看看(不推荐这样搞得,只是玩玩的):

 private String Name;

2.3 通过xml进行映射

有的时候,两个实体的属性名不一样,这个时候就不能使用Dozer提供的隐式映射了,我们需要使用Dozer提供的显式映射–通过xml配置两个实体的映射关系。

首先,我们先对两个实体类修改一下:

@Data
public class User {private String name;private String pwd;private Date birth;
}@Data
public class UserVO {private String username;private String password;private Date birthday;
}

接着,在resources目录下创建userMapping.xml

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"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><!--配置映射关系--><mapping><class-a>com.hzp.entity.User</class-a><class-b>com.hzp.entity.UserVO</class-b><field><a>name</a><b>username</b></field><field><a>pwd</a><b>password</b></field><field><a>birth</a><b>birthday</b></field></mapping>
</mappings>

最后,编写测试类:

public static void main(String[] args) {Mapper mapper = DozerBeanMapperBuilder.create().withMappingFiles("userMapping.xml").build();User user = new User();user.setName("张三");user.setPwd("123456");user.setBirth(new Date());UserVO userVO = mapper.map(user, UserVO.class);System.out.println(userVO);//UserVO(username=张三, password=123456, birthday=Thu Nov 12 20:44:50 CST 2020)}

2.4 使用注解进行映射

从版本 5.3.2 开始,Dozer 也开始提供注解支持,使用注释的明显原因是避免在映射代码中复制字段和方法名称,注释可以放在映射类的属性上,从而减少代码量。下面来看具体的使用:

@Data
public class UserVO {@Mapping("name")private String username;@Mapping("pwd")private String password;@Mapping("birth")private Date birthday;
}

注意:Dozer是双向映射的,所以我们只需要在一方配置即可

测试一波:

public static void main(String[] args) {Mapper mapper = DozerBeanMapperBuilder.buildDefault();User user = new User();user.setName("张三");user.setPwd("123456");user.setBirth(new Date());UserVO userVO = mapper.map(user, UserVO.class);System.out.println(userVO);//UserVO(username=张三, password=123456, birthday=Thu Nov 12 20:44:50 CST 2020)}

3、与SpringBoot集成

3.1 搭建环境

创建一个SpringBoot项目,导入下列依赖:

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

接着创建DozerMapperConfig配置类

@Configuration
public class DozerMapperConfig {@Beanpublic DozerBeanMapperFactoryBean dozerMapper(@Value("classpath:mappings/*.xml") Resource[] resources) throws IOException {DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean = new DozerBeanMapperFactoryBean();dozerBeanMapperFactoryBean.setMappingFiles(resources);return dozerBeanMapperFactoryBean;}
}

接着,在resources目录下新建mappings目录,并创建userMapping.xml

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd"><!--配置映射关系--><mapping><class-a>com.hzp.dozerboot.entity.User</class-a><class-b>com.hzp.dozerboot.entity.UserVO</class-b><field><a>name</a><b>username</b></field><field><a>pwd</a><b>password</b></field></mapping>
</mappings>

测试

@SpringBootTest
@RunWith(SpringRunner.class)
class DozerBootApplicationTests {@Autowiredprivate Mapper mapper;@Testpublic void dozerTest() {User user = new User();user.setName("张三");user.setPwd("123456");UserVO userVO = mapper.map(user, UserVO.class);System.out.println(userVO);//UserVO(username=张三, password=123456)}
}

Dozer的基本使用相关推荐

  1. java反射po转vo_三步走使用Dozer (Do,Po,Vo转换工具)

    第一步 把依赖加上 com.github.dozermapper dozer-core 6.5.0 第二步,不同属性名的在被转换bean上(Do)注解@Mapping("vo里该字段名称&q ...

  2. jaxb和dozer简介

    一.jaxb是什么      JAXB是Java Architecture for XML Binding的缩写.可以将一个Java对象转变成为XML格式,反之亦然.      我们把对象与关系数据库 ...

  3. java dozer 深度_java – Dozer深度映射设置为Set

    免责声明: Mapping deep properties with intermediate collections in dozer已经提出了同样的问题,但没有接受答案(我的案例没有正确答案). ...

  4. Dozer 使用总结

    http://seyaa.iteye.com/blog/762494 1.1 什么是dozer? Dozer 是一个对象转换工具. Dozer可以在JavaBean到JavaBean之间进行递归数据复 ...

  5. dozer bean_使用Dozer框架进行Bean操作

    dozer bean 介绍 如您所知,您可以在任何操作系统中将文件或文件夹从源位置复制到目标位置. 您是否考虑过复制基本上是POJO的java对象? 在很多情况下,您需要将源bean的内容复制到目标b ...

  6. 使用Dozer框架进行Bean操作

    介绍 如您所知,您可以在任何操作系统中将文件或文件夹从源位置复制到目标位置. 您是否考虑过复制基本上是POJO的java对象? 在许多情况下,您需要将源bean的内容复制到目标bean. 我不关心对象 ...

  7. java dozer map转对象_对象转换利器之Dozer

    在Java的世界中,经常会涉及到需要在2个对象中进行转换,比如说: 调用SOAP Web服务,需要把自己的Domain对象转换为Soap服务的Jaxb对象请求, 在分层级SOA架构中,2个层级之间Do ...

  8. 使用了Spring boot devtools, dozer转换嵌套对象失败解决记录

    2019独角兽企业重金招聘Python工程师标准>>> 业务背景: 添加商品以及价格,一个商品会有多个价格(针对不同用户等级). 代码: 先在controller中使用dozer将g ...

  9. dozer无法映射java8中的LocalDateTime类型的解决方案

    dozer是一个很方便的bean映射工具包,可以很轻松地做到两个bean对象的属性值复制,但是dozer包在2014年的时候停止更新了,而jdk1.8也是2014年发布的,所以对于java8中的新日期 ...

  10. java dozer,MapStruct相当于提示(Dozer)?

    在Dozer中,我们能够在字段映射期间提示提示中的接口 . 我们如何在MapStruct中实现相同的目标? 我无法在这里输入确切的代码 . 但是,它与下面类似 . 我们这里有一个Domain类示例: ...

最新文章

  1. 【java】Lombok的使用
  2. python找出第二大值,Python程序在Dictionary中查找第二个最大值
  3. Hbase架构与原理
  4. 【数论】Crash的数字表格 / JZPTAB(P1829)
  5. oracle之创建和管理表之练习题
  6. matlab phog,科学网—UCF 大牛 Prof. Shah 课题组代码合集 - 张重的博文
  7. linux中实现getch函数
  8. 计算机控制系统步进电机,步进电机计算机控制系统设计.doc
  9. 天轰穿&甜老丝儿 python浅显易懂全教程
  10. PHP icbc工商银行开放平台聚合支付,二维码扫码支付API云收呗对接步骤,稳步发展
  11. 密码学(一):古典密码之维吉尼亚密码原理介绍
  12. 个人支付免费开通支付宝付款功能(免费签约)支付宝当面付开通集成到网站教程
  13. 如何自定义Chromecast的背景以显示个性化图片,新闻等
  14. 国庆八天乐,码农长假怎么过?别加班了
  15. VBox 启动虚拟机失败 - NtCreateFile
  16. 想要报考华为技术认证,你一定要了解这些
  17. 无人值守安装linux操作系统
  18. 进化从不关心已经完成生殖任务的人
  19. hdu4966 最小树形图+虚根
  20. php代码生成折现统计图

热门文章

  1. 栾川一高2021高考成绩查询,加油!栾川一高举行2021年高考百日冲刺誓师大会!...
  2. 解决nmcli unmanaged问题
  3. chapter3 Python 列表
  4. 通过Mac远程调试iPhone/iPad上的网页(转)
  5. “魂系”游戏的魅力,不止在于受苦——浅谈黑暗之魂的设计特色
  6. 三个动作就能养生健身!
  7. 【JavaScript基础教程】
  8. linux 挂载磁盘命令
  9. 2022-2028全球纸浆用亚氯酸钠行业调研及趋势分析报告
  10. 我给财务女神写了个批量发工资脚本!她让我做她闺蜜?不应该是...