• 使用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或基于代码的配置指定自定义转换。

    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

    岁月无声无息的溜走,除了带走一个无聊者的时光,还会沉淀一个努力者的人生。
  • 相关阅读:
    GridView多行多列合并单元格(指定列合并)
    项目管理知识体系指南PMBOK指南
    作业调度框架 Quartz.NET 2.0 beta 发布
    外语学习有助于大脑发育
    抢书之JS版
    mac 安装python和Django开发环境
    戏谈一道面试题
    —安装时填写注册表
    深入浅出SQL Server Replication第一篇:走近Replication(上)
    IIS寄宿方式的Web地址、BaseAddress和EndPoint Address的关系
  • 原文地址:https://www.cnblogs.com/dayandday/p/10974987.html
Copyright © 2020-2023  润新知