zoukankan      html  css  js  c++  java
  • BeanCopier使用说明

     

    BeanCopier从名字可以看出了,是一个快捷的bean类复制工具类。

    如何使用,我就直接丢代码了

    public class BeanCopierTest {
        static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
        public static void main(String[] args) {
    //        sameCopy();
    //        difCopy();
            difCopyConvert();
    //        noSetterCopy();
    //        lessSetterCopy();
    //        lessSetterCopy2();
        }
    
        // 属性名称、类型都相同,成功复制
        public static void sameCopy() {
            one one = new one();
            one.setId(1);
            one.setName("one");
            final BeanCopier copier = BeanCopier.create(one.class, two.class, false);
            two two = new two();
            copier.copy(one, two, null);
            System.out.println(one.toString());
            System.out.println(two.toString());
        }
    
        // 属性名称相同,类型不同,类型不同的不能复制
        public static void difCopy() {
            one one = new one();
            one.setId(1);
            one.setName("one");
            final BeanCopier copier = BeanCopier.create(one.class, oneDif.class, false);
            oneDif oneDif = new oneDif();
            copier.copy(one, oneDif, null);
            System.out.println(one.toString());
            System.out.println(oneDif.toString());
        }
    
        // 属性名称相同,类型不同的解决方法,使用convert,注意要写上类型相同的情况
        public static void difCopyConvert() {
            one one = new one();
            one.setId(1);
            one.setName("one");
            final BeanCopier copier = BeanCopier.create(one.class, oneDif.class, true);
            oneDif oneDif = new oneDif();
            copier.copy(one, oneDif, new Converter() {
                @Override
                public Object convert(Object value, Class target, Object context) {
                    if (value instanceof Integer) {
                        return (Integer) value;
                    } else if (value instanceof Timestamp) {
                        Timestamp date = (Timestamp) value;
                        return sdf.format(date);
                    } else if (value instanceof BigDecimal) {
                        BigDecimal bd = (BigDecimal) value;
                        return bd.toPlainString();
                    } else if (value instanceof String) {
                        return "" + value;
                    }
                    return null;
                }
            });
            System.out.println(one.toString());
            System.out.println(oneDif.toString());
        }
    
        // 目标无setter,不能复制,注意此处,网上说会报错,但是新版本并无此报错
        public static void noSetterCopy() {
            one one = new one();
            one.setId(1);
            one.setName("one");
            final BeanCopier copier = BeanCopier.create(one.class, oneNoSetter.class, false);
            oneNoSetter oneNoSetter = new oneNoSetter();
            copier.copy(one, oneNoSetter, null);
            System.out.println(one.toString());
            System.out.println(oneNoSetter.toString());
        }
    
        // 源无setter,都不能赋值了好吧?
        public static void noSetterCopy2() {
    
        }
    
        // 目标少setter,少setter的没值
        public static void lessSetterCopy() {
            one one = new one();
            one.setId(1);
            one.setName("one");
            final BeanCopier copier = BeanCopier.create(one.class, oneLessSetter.class, false);
            oneLessSetter oneLessSetter = new oneLessSetter();
            copier.copy(one, oneLessSetter, null);
            System.out.println(one.toString());
            System.out.println(oneLessSetter.toString());
        }
    
        // 源少setter,只有有setter的可以复制
        public static void lessSetterCopy2() {
            oneLessSetter oneLessSetter = new oneLessSetter();
    //        oneLessSetter.setId(1);
            oneLessSetter.setName("one");
            final BeanCopier copier = BeanCopier.create(oneLessSetter.class, one.class, false);
            one one = new one();
            copier.copy(oneLessSetter, one, null);
            System.out.println(oneLessSetter.toString());
            System.out.println(one.toString());
        }
    }

    下面是pojo类

    public class one {
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        private int id;
        private String name;
    
        @Override
        public String toString() {
            return " one{  "
                    + " 
     id : " + this.id
                    + " 
     name : " + this.name
                    +"  
     }";
        }
    }
    public class two {
        private int id;
        private String name;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return " two{  "
                    + " 
     id : " + this.id
                    + " 
     name : " + this.name
                    + "  
     }";
        }
    }
    public class oneDif {
        private Integer id;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        private String name;
        @Override
        public String toString() {
            return " oneDif{  "
                    + " 
     id : " + this.id
                    + " 
     name : " + this.name
                    + " 
     }";
        }
    }
    public class oneLessSetter {
        public int getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        private int id;
    
        public void setName(String name) {
            this.name = name;
        }
    
        private String name;
    
        @Override
        public String toString() {
            return " oneLessSetter{  "
                    + " 
     id : " + this.id
                    + " 
     name : " + this.name
                    + " 
     }";
        }
    }
    package com.lgp.thinkinjavademos.demo.BeanCopier;
    
    /**
     * @AUTHOR lgp
     * @DATE 2018/6/25 16:06
     * @DESCRIPTION
     **/
    public class oneNoSetter {
        public int getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        private int id;
        private String name;
    
        @Override
        public String toString() {
            return " oneNoSetter{  "
                    + " 
     id : " + this.id
                    + " 
     name : " + this.name
                    + " 
     }";
        }
    }

    放入缓存,提高性能

    public class CachedBeanCopier {
        //    创建过的BeanCopier实例放到缓存中,下次可以直接获取,提升性能
        static final Map<String, BeanCopier> BEAN_COPIERS = new HashMap<String, BeanCopier>();
    
        public static void copy(Object srcObj, Object destObj) {
            String key = genKey(srcObj.getClass(), destObj.getClass());
            BeanCopier copier = null;
            if (!BEAN_COPIERS.containsKey(key)) {
                copier = BeanCopier.create(srcObj.getClass(), destObj.getClass(), false);
                BEAN_COPIERS.put(key, copier);
            } else {
                copier = BEAN_COPIERS.get(key);
            }
            copier.copy(srcObj, destObj, null);
        }
    
        private static String genKey(Class<?> srcClazz, Class<?> destClazz) {
            return srcClazz.getName() + destClazz.getName();
        }
    }

     

  • 相关阅读:
    深拷贝和浅拷贝
    【.NET MVC分页】.NET MVC 使用pagelist 分页
    Win10开启IIS
    Win10开启IIS
    目前问题:plupload上传带参数到后台
    目前问题:plupload上传带参数到后台
    jquery怎样获取html页面中的data-xxx
    .Net MVC删除图片
    .Net MVC删除图片
    AlloyClip的简单使用
  • 原文地址:https://www.cnblogs.com/ydymz/p/9225145.html
Copyright © 2011-2022 走看看