zoukankan      html  css  js  c++  java
  • dozermapper《对象复制》处理工具

    maven地址:

    使用6.0版本 其他版本使用方法有所不同

            <dependency>
                <groupId>com.github.dozermapper</groupId>
                <artifactId>dozer-core</artifactId>
                <version>6.0.0</version>
            </dependency>

    工具类代码,支持过滤null属性不复制的功能。

    package com.softium.platform.common.utils;
    
    import org.dozer.DozerBeanMapper;
    import org.dozer.loader.api.BeanMappingBuilder;
    import org.dozer.loader.api.TypeMappingOptions;
    
    import java.lang.ref.WeakReference;
    import java.util.ArrayList;
    import java.util.List;
    //import org.dozer.loader.api.TypeMappingOptions.mapEmptyString;
    
    public class VoPoConverter {
    
        //    private static Mapper dozer = DozerBeanMapperBuilder.buildDefault();
        private static DozerBeanMapper dozer = new DozerBeanMapper();
    
        /**
         * 将src对象中的属性值复制到desc对象的同名属性中
         * @param src 源
         * @param desc 目标
         */
        public static void copyProperties(Object src, Object desc){
            dozer.map(src, desc);
        }
        
        /**
         * 将src对象中的属性值复制到新建的desc对象的同名属性中
         * @param src 源
         * @param descClass 目标class
         * @return
         */
        public static <T> T copyProperties(Object src, Class<T> descClass){
            if(src == null )
                return null;
            return (T)dozer.map(src, descClass);
        }
        
        /**
         * 将srcList中的元素复制到元素类型为descClass的List集合中
         * @param srcList  源list
         * @param descClass 目标list
         * @return
         */
        public static <T> List<T> copyList(@SuppressWarnings("rawtypes") List srcList, Class<T> descClass){
            List<T> descList = new ArrayList<T>();
            if (srcList != null){
                for (Object obj : srcList){
                    T t = VoPoConverter.copyProperties(obj, descClass);
                    descList.add(t);
                }
            }
            return descList;
        }
        
        
        /**
         * 
        * @Description: copy对象方法,当属性值是null的时候 不赋值,适用于对象修改。
        * @param sources  源
        * @param destination 目标
        *
        * @version: v1.0.0
        * @author: lp
        * @date: 2019年7月18日 下午3:15:58
        *
         */
        public static void copyPropertiesNotNull(final Object sources, final Object destination) {
    
            WeakReference weakReference = new WeakReference(new DozerBeanMapper());
            DozerBeanMapper mapper = (DozerBeanMapper) weakReference.get();
    
            mapper.addMapping(new BeanMappingBuilder() {
    
                @Override
                protected void configure() {
                    mapping(sources.getClass(), destination.getClass(),TypeMappingOptions.mapNull(false), TypeMappingOptions.mapEmptyString(false));
                }
            });
            mapper.map(sources, destination);
            mapper.destroy();
            weakReference.clear();
        }
    }
  • 相关阅读:
    golang模拟动态高优先权优先调度算法
    【2019腾讯暑期实习生正式批笔试1,2】
    golang优先队列
    git常见操作
    小L的试卷
    Unable to connect to the Redgate Client Service. Sql Prompt 报错不能用解决
    未能加载文件或程序集“Microsoft.VisualStudio.Enterprise.AspNetHelper, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。系统找不到指定的文件。
    LumiSoft 邮件操作删除(无法删除解决方法)
    .net MVC 项目中 上传或者处理进度获取方案
    C# mvc Request 请求过长报404错误的解决思路分析
  • 原文地址:https://www.cnblogs.com/yanxioayu/p/11208921.html
Copyright © 2011-2022 走看看