使用dozer实现对象转换

Dozer的github地址:https://github.com/DozerMapper/dozer
Dozer的官方文档:http://dozer.sourceforge.net/
什么是Dozer
Dozer是一个JavaBean映射工具库。
Dozer是Java Bean到Java Bean映射器,将数据从一个对象递归到另外一个对象,它是一个开放源代码映射框架,是强大的,通用的,灵活的,可重用的和可配置的。
Dozer支持简单的属性映射,复杂类型映射,双向映射,隐式显式映射以及递归映射。 这包括在元素级别还须要映射的映射集合属性。
Dozer不只支持属性名称之间的映射,并且还能够在类型之间自动转换。 大多数转换方案都是开箱即用的,但Dozer还容许您经过XML或基于代码的配置指定自定义转换。php

Dozer有三种映射配置方式:java

注解方式
API方式
XML方式git

在springboot中的使用
1.引入依赖
项目使用maven,添加如下依赖到你的pom.xml便可:
版本(Apr 22, 2014)目前maven仓库中最新的版本github

<dependency> <groupId>net.sf.dozer</groupId> <artifactId>dozer</artifactId> <version>5.5.1</version> </dependency> 

若是要映射的两个对象有彻底相同的属性名,那么一切都很简单。
只须要直接使用Dozer的API便可:spring

Mapper mapper = new DozerBeanMapper(); DestinationObject destObject = mapper.map(sourceObject, DestinationObject.class); 

实际应用,项目须要返回VO类的数据,但你在mapper中是使用PO类,返回时须要转换springboot

Mapper announcementDozerMapper =new DozerBeanMapper(); /** * @param announcementPo 原PO类的announcement类型 * @return 返回VO类的announcement类型 * @description 将announcement的PO类转化为VO类 **/ private AnnouncementVo doToVo(AnnouncementPo announcementPo){ if(announcementPo == null) { return null; } AnnouncementVo vo = announcementDozerMapper.map(announcementPo, AnnouncementVo.class); return vo; } 

假如是集合对象呢,实际上就是使用JAVA8的stream流app

Mapper announcementDozerMapper =new DozerBeanMapper(); /** * @param announcementPos 原PO类的announcement类型集合 * @return 返回VO类的announcement类型集合 * @description 将announcement的PO类集合转化为VO类集合 **/ private List<AnnouncementVo> doToVo(List<AnnouncementPo> announcementPos){ if(announcementPos == null) { return null; } return announcementPos .stream() .map(announcement -> this.announcementDozerMapper.map(announcement, AnnouncementVo.class)) .collect(Collectors.toList()); } 

注:官网着重建议:在现实应用中,最好不要每次映射对象时都建立一个Mapper实例来工做,这样会产生没必要要的开销。若是你不使用IoC容器(如:spring)来管理你的项目,那么,最好将Mapper定义为单例模式。
如何来定义为单例模式呢?
1.建立类的惟一实例,加static变为类的成员框架

public class DozerMapperConstant { public static final Mapper dozerMapper = new org.dozer.DozerBeanMapper(); } 

2.获取类的实例,经过类名.成员获取实例maven

Mapper announcementDozerMapper =  DozerMapperConstant.dozerMapper;

参考文章:http://www.alliedjeep.com/146242.htm工具

相关文章
相关标签/搜索