使用dozer实现对象转换

简介: Dozer的github地址:https://github.com/DozerMapper/dozerDozer的官方文档:http://dozer.sourceforge.net/什么是DozerDozer是一个JavaBean映射工具库。

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

Dozer有三种映射配置方式:

注解方式
API方式
XML方式

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

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

如果要映射的两个对象有完全相同的属性名,那么一切都很简单。
只需要直接使用Dozer的API即可:

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

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

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流

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.获取类的实例,通过类名.成员获取实例

Mapper announcementDozerMapper =  DozerMapperConstant.dozerMapper;

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

目录
相关文章
|
Java Maven 开发工具
【mapstruct】Java 中 mapstruct mapper 转换器部分字段转换无效的解决方案
【mapstruct】Java 中 mapstruct mapper 转换器部分字段转换无效的解决方案
712 0
|
安全 Java Maven
使用MapStruct简化Java对象映射
在软件开发中,经常需要将一个Java对象的数据映射到另一个对象,特别是在使用DTO(Data Transfer Object)模式时。手动编写这些映射代码非常繁琐,而MapStruct可以帮助我们自动生成这些映射代码,从而提高开发效率和代码质量。
271 2
|
6月前
|
缓存 安全 Java
你还在用 BeanUtils?试试 MapStruct,优雅的对象转换解决方案
你还在用 BeanUtils?试试 MapStruct,优雅的对象转换解决方案
94 0
|
Java 数据库连接 数据库
解析Java中的MyBatis Plus注解 @EnumValue:优雅处理枚举值映射
在数据库操作中,枚举类型的值往往需要与数据库表中的某个字段进行映射,以便在操作中能够进行相应的转换。MyBatis Plus作为一款强大的ORM框架,提供了注解 `@EnumValue`,使开发者能够更加灵活地处理枚举值与数据库字段的映射关系,从而减少了繁琐的转换逻辑。本文将详细介绍 `@EnumValue` 注解的用法及其在持久层开发中的应用。
3622 0
|
Java
Java中Bean与Map之间相互转换工具类
Java中Bean与Map之间相互转换工具类
193 0
|
XML Java 数据安全/隐私保护
java采用注解方式将JavaBean转换为XML并采用AES全报文加密
java采用注解方式将JavaBean转换为XML并采用AES全报文加密
293 0
|
XML 前端开发 Java
XStream(可把javabean转换成XMI的小工具)|学习笔记
快速学习XStream(可把javabean转换成XMI的小工具)
|
前端开发 Java
如何利用Java中的反射实现Map和JavaBean间转换
Java中利用反射进行Map和JavaBean间转换,在日常工作中,有时候我们可能会遇到以下这样的情况发生。
178 0
下一篇
无影云桌面