`
xly1981
  • 浏览: 147193 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

    博客分类:
  • java
 
阅读更多

没有废话

先是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;
    }
}

 

分享到:
评论

相关推荐

    BeanUtilsBean对象复制使用(类型可以自动转化)

    本文将深入探讨`BeanUtilsBean`对象复制的功能,特别关注它如何实现类型自动转换。`BeanUtilsBean`是BeanUtils的核心类,提供了对JavaBean属性的便捷访问和操作。 首先,让我们理解什么是对象复制。对象复制是指将...

    Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier

    PropertyUtils是Apache Commons BeanUtils的扩展,它增强了对复杂类型和集合的处理能力。与BeanUtils相比,PropertyUtils提供了更精确的异常处理。尽管在功能上有所增强,但在性能上与BeanUtils相差不大。 Spring...

    BeanUtils所需的包

    使用BeanUtils,开发者可以避免手动编写大量的getter和setter方法来实现对象间的属性复制。例如,BeanUtils.copyProperties()方法允许我们快速地将一个对象的所有属性复制到另一个对象中。这在处理数据模型或业务...

    java不同对象及集合的多次复制

    - **Apache Commons BeanUtils库**:提供了`BeanUtils.copyProperties()`方法,可以快速实现对象间的属性复制,但不支持自定义复制规则。 - **Dozer库**:允许使用注解来定义复制规则,支持深度复制和类型转换,...

    BeanUtils jar包+源码

    BeanUtils的核心功能在于属性的自动类型转换和封装,它能够自动处理JavaBeans对象之间的属性拷贝,即使源对象和目标对象的属性类型不完全匹配,BeanUtils也能尝试进行类型转换。例如,将字符串转换为整型或浮点型,...

    BeanUtils类库jar包和源码

    BeanUtils是Apache Commons项目中的一个核心工具类库,...通过理解和熟练使用BeanUtils,开发者可以更加高效地进行对象之间的数据交换和处理。而提供的源码则可以帮助我们深入理解其内部机制,更好地定制和扩展功能。

    MyBatisDemo && JAVA把一个对象的全部属性复制到另一个相同的对象

    这篇博文“MyBatisDemo && JAVA把一个对象的全部属性复制到另一个相同的对象”探讨的是如何在Java编程中实现对象属性的深度复制。MyBatis是一个流行的Java持久层框架,它简化了数据库操作,而对象复制则是处理业务...

    beanUtils jar 包,还包括source和doc

    - **属性复制**:BeanUtils最核心的功能就是实现对象间的属性复制。通过`copyProperties()`方法,可以将一个对象的所有属性值复制到另一个对象,这在数据模型转换或者数据持久化过程中非常有用。 - **属性设置和...

    beanutils包

    例如,通过`BeanUtils.copyProperties()`方法,可以方便地将一个对象的属性值复制到另一个对象,极大地提高了代码的可读性和维护性。 2. **类型转换**:BeanUtils库能够自动处理基本数据类型的转换,如将字符串转换...

    commons-beanutils 源码

    反射机制使得BeanUtils可以处理任何实现了getter和setter方法的对象。 - 在`PropertyUtils`类中,可以看到对`java.lang.reflect.Method`和`java.lang.reflect.Field`的大量使用,它们用于查找和调用对象的属性方法...

    BeanUtils工具 .jar 包

    BeanUtils工具.jar包是Apache Commons项目中的一个核心组件,它为Java开发人员提供了一套方便的工具类,用于处理Java Bean对象之间的属性复制、类型转换等常见操作。这个库简化了对象模型之间的数据绑定,特别是在...

    commons-beanutils-1.9.4

    - **复制属性**:`copyProperties()`方法可以将一个JavaBean对象的属性值复制到另一个对象,这在处理模型对象时非常有用。 - **默认值**:当尝试获取不存在的属性或者转换失败时,可以设置默认值来避免异常。 - *...

    beanutils JAR包下载

    《Apache Commons ...在理解和掌握BeanUtils的基础上,开发者可以更高效地处理JavaBeans对象,提高开发效率,同时降低出错的可能性。在使用时,应结合具体项目需求,合理运用BeanUtils的功能,以实现最佳效果。

    beanUtils包与源码

    这个包的出现极大地简化了对象属性的复制、设置和获取,使得开发者能够更高效地进行Servlet开发。现在,让我们深入探讨BeanUtils包的核心功能、工作原理以及如何结合源码来学习和应用。 首先,BeanUtils的核心功能...

    BeanUtils工具包

    - 如果属性名不完全匹配或者类型转换失败,BeanUtils会抛出异常,因此需要确保对象属性名的正确性和类型的一致性。 - 为了提高性能,可以使用BeanUtils.copyProperties()的重载方法,指定只复制部分属性。 五、...

    beanutils源码

    4. **异常处理机制**:查看BeanUtils如何捕获和处理异常,以及在什么情况下抛出异常。 5. **测试用例**:分析`src/test/java`下的测试类,了解BeanUtils库的各种使用场景和边界条件。 6. **性能优化**:BeanUtils...

    beanutils-1.8.3

    总的来说,Apache Commons BeanUtils 1.8.3版是Java开发中处理JavaBean对象的一种高效工具,提供了方便的属性操作和类型转换功能,源代码的开放使得开发者可以更深入地理解和利用这个库。在使用时,可以结合API文档...

    commons-beanutils-1.9.2下载

    7. **国际化支持**:BeanUtils可以与Apache Commons Locale和MessageSource配合,实现基于不同地区的属性值转换和显示。 在实际开发中,Apache Commons BeanUtils常用于Web框架如Struts和Spring,以及任何需要进行...

    JavaBean和beanutils工具类的学习

    JavaBean和BeanUtils工具类是Java开发中常用的技术,它们主要应用于对象属性的访问和操作。JavaBean是一种规范,用于创建...通过熟练运用,开发者可以更高效地实现对象的创建、属性设置和数据传递,从而提升开发效率。

Global site tag (gtag.js) - Google Analytics