欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

BeanCopier和BeanUtils实现对象复制,处理date类型

程序员文章站 2022-04-01 21:38:31
...

没有废话

先是BeanUtils的实现类型:

import java.lang.reflect.InvocationTargetException;
import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;

import com.huateng.common.tools.ConvertTools;
import com.huateng.common.tools.subTools.form.ProductFormVo;
import com.huateng.common.tools.subTools.form.ProductFormVo1;

/**
 * @author Jira
 *
 */
public class LocalBeanUtils  extends BeanUtils {
    
    static {   
        ConvertUtils.register(new DateConvert(), java.util.Date.class);   
        ConvertUtils.register(new DateConvert(), java.sql.Date.class);   
        ConvertUtils.register(new DateConvert(), java.lang.String.class);
//        ConvertUtils.register(new DateConvert(), java.lang.Long.class);   //可以添加新的转换工具
    }   
 
   public static void copyProperties(Object dest, Object orig) {   
       try {   
            BeanUtils.copyProperties(dest, orig);   
        } catch (IllegalAccessException ex) {   
            ex.printStackTrace();   
        } catch (InvocationTargetException ex) {   
            ex.printStackTrace();   
        }   
    }
    
    public static void main(String...strings) throws Exception{
        ProductFormVo pf;
        Long l=System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            ProductFormVo1 p = new ProductFormVo1();
            p.setArticleId("a");
            p.setCreateStamp(new Date());
            p.setThruDate("2000-11-11 12:00:00");
            pf = new ProductFormVo();
            LocalBeanUtils.copyProperties(p, pf);
        }
        System.out.println(System.currentTimeMillis()-l);
    }

}

  它用到的DateConvert

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.Converter;

public class DateConvert implements Converter {

    public Object convert(Class arg0, Object arg1) {
        if (null == arg1)
            return null;
        /** 输入String ,输出Date */
        if (arg1 instanceof String && arg0 != java.lang.String.class) {
            String p = (String) arg1;
            if (p == null || p.trim().length() == 0) {
                return null;
            }
            try {

                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                return df.parse(p.trim());
            } catch (Exception e) {
                try {
                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                    return df.parse(p.trim());
                } catch (ParseException ex) {
                    return arg1;
                }
            }
        }/** 输入String ,输出String */
        else if (arg1 instanceof String && arg0 == java.lang.String.class) {
            return arg1;
        }/** 输入Date ,输出String */
        else if (arg1 instanceof java.util.Date) {
            try {
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                return df.format((java.util.Date) arg1);
            } catch (Exception e) {
                return null;
            }
        }/** 输入Date ,输出String */
        else if (arg1 instanceof java.sql.Date) {
            try {
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                return df.format((java.sql.Date) arg1);
            } catch (Exception e) {
                return null;
            }
        }
        return null;
    }

}

 

下面是BeanCopier:

 

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import net.sf.cglib.beans.BeanCopier;

import com.huateng.common.tools.subTools.DateConverterBeanCopier;
import com.huateng.common.tools.subTools.form.ProductFormVo;
import com.huateng.common.tools.subTools.form.ProductFormVo1;

/**
 * @author Jira
 *vo对象间的赋值操作
 *DateConverterBeanCopier 可以添加新的对象转换功能
 */
public class BeanCopierUtils {
    public static Map<String,BeanCopier> beanCopierMap = new HashMap<String,BeanCopier>();
    
    public static void copyProperties(Object source, Object target){
        String beanKey =  generateKey(source.getClass(), target.getClass());
        BeanCopier copier =  null;
        if(!beanCopierMap.containsKey(beanKey)){
             copier = BeanCopier.create(source.getClass(), target.getClass(), true);
             beanCopierMap.put(beanKey, copier);
        }else{
             copier = beanCopierMap.get(beanKey);
        }
        copier.copy(source, target, new DateConverterBeanCopier());
    }   
    private static String generateKey(Class<?> class1,Class<?>class2){
        return class1.toString() + class2.toString();
    }
    
    public static void main(String...strings){
        ProductFormVo pf;
        Long l=System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            ProductFormVo1 p = new ProductFormVo1();
            p.setArticleId("a");
            p.setCreateStamp(new Date());
            p.setThruDate("2000-11-11 12:00:00");
            pf = new ProductFormVo();
            BeanCopierUtils.copyProperties(p, pf);
        }
        System.out.println(System.currentTimeMillis()-l);
//        System.out.println(pf.getArticleId());
//        System.out.println(pf.getCreateStamp());
//        System.out.println(ConvertTools.formatDataStyle3(pf.getThruDate()));
    }
}

 它用到的DateConverterBeanCopier:

 

import java.text.ParseException;
import java.text.SimpleDateFormat;

/**
 * @author Jira
 *
 */
public class DateConverterBeanCopier implements net.sf.cglib.core.Converter
{
    public Object convert(Object arg1, Class arg0, Object context){
        if (arg1 instanceof String && arg0 != java.lang.String.class) {
            String p = (String) arg1;
            if (p == null || p.trim().length() == 0) {
                return null;
            }
            try {
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                return df.parse(p.trim());
            } catch (Exception e) {
                try {
                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                    return df.parse(p.trim());
                } catch (ParseException ex) {
                    return arg1;
                }
            }
        }/** 输入String ,输出String */
        else if (arg1 instanceof String && arg0 == java.lang.String.class) {
            return arg1;
        }/** 输入Date ,输出String */
        else if (arg1 instanceof java.util.Date) {
            try {
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                return df.format((java.util.Date) arg1);
            } catch (Exception e) {
                return null;
            }
        }/** 输入Date ,输出String */
        else if (arg1 instanceof java.sql.Date) {
            try {
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                return df.format((java.sql.Date) arg1);
            } catch (Exception e) {
                return null;
            }
        }
        return null;
    }
}