zoukankan      html  css  js  c++  java
  • apache-beanutil工具类的使用

    BeanUtil工具类是apache commons中的项目

    使用BeanUtil除了需要 commons-beanutils-1.8.3.jar 外,可能需要记录错误日志信息,再加入 commons-logging-1.1.3.jar(也是apache的) 即可

    下面着重看一些例子

    // 实体类User Point,这里就省去get,set方法
    
    package com.yangwei.model;
    
    import java.util.Date;
    
    public class User {
    
        private String name;
        private int age;
        private Date birth;
        private Point point;
    }
    public class Point { private int x; private int y; }
    package com.yangwei.test;
    
    import static org.junit.Assert.fail;
    
    import java.lang.reflect.InvocationTargetException;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.junit.Test;
    
    import com.yangwei.model.User;
    
    public class TestBeanUtil {
    
        @Test
        public void test01() {
            
            try {
                User u=new User();
                //假设要为name设置值"zhangsan"
                String key="name";
                String value="zhangsan";
                //以前我们使用Method 调用它的invoke方法完成操作
                //现在我们使用BeanUtils的copyProperty完成设值操作
                BeanUtils.copyProperty(u, key, value); 
                System.out.println(u.getName());//zhangsan
                
                //拷贝不认识的属性,也不会报错
                BeanUtils.copyProperty(u, "yyy", value); 
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
            
        }
    
    }
    两个转换器类 ,实现Converter接口

    package
    com.yangwei.model; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.beanutils.Converter; public class DateConverter implements Converter{ /** * 第一个参数表示要转换的类型, 第二个参数表示要转换的值 * 比如要拷贝一个字符串到日期中,第一个参数就是日期,第二个参数是字符串值 */ SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd"); @Override public Object convert(Class clz, Object obj) { if(clz!=Date.class){ return null; } try { if(obj instanceof String){ return f.parse((String) obj); } } catch (ParseException e) { e.printStackTrace(); } return null; } }
    package com.yangwei.model;
    
    import org.apache.commons.beanutils.Converter;
    
    public class PointConverter implements Converter {
    
        /**
         * 将传递过来的值转为Point类
         */
        @Override
        public Object convert(Class clz, Object obj) {
            
            if(clz!=Point.class){
                return null;
            }
            if(obj instanceof String){
                String value=(String)obj;
                String strArr[]=value.split(",");
                if(strArr!=null && strArr.length==2){
                    Point point=new Point();
                    point.setX(Integer.parseInt(strArr[0]));
                    point.setY(Integer.parseInt(strArr[1]));
                    return point;
                }
            }
            return null;
        }
    
    }
    package com.yangwei.test;
    
    import java.lang.reflect.InvocationTargetException;
    import java.util.Date;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.commons.beanutils.ConvertUtils;
    import org.junit.Test;
    
    import com.yangwei.model.DateConverter;
    import com.yangwei.model.Point;
    import com.yangwei.model.PointConverter;
    import com.yangwei.model.User;
    
    public class TestBeanUtil {
    
        @Test
        public void test01() {
            
            try {
                User u=new User();
                //假设要为name设置值"zhangsan"
                String key="name";
                String value="zhangsan";
                //以前我们使用Method 调用它的invoke方法完成操作
                //现在我们使用BeanUtils的copyProperty完成设值操作
                BeanUtils.copyProperty(u, key, value); 
                System.out.println(u.getName());//zhangsan
                
                //拷贝不认识的属性,也不会报错
                BeanUtils.copyProperty(u, "yyy", value); 
                /**
                 * 完整拷贝一个对象,此时会有错误,因为它不知道将Date转为何种类型
                 * 日期是有很多中格式情况的,如 1977-10-10 1977/10/10等
                 * 此时,如何处理呢???
                 * 需要定义转换器  定义转换器的步骤:
                 * 1, 创建一个类,实现Converter接口
                 * 2,重写convert方法,实现转换
                 * 3,在拷贝属性之前,注册转换器
                */
                ConvertUtils.register(new DateConverter(), Date.class);
                BeanUtils.copyProperty(u, "birth", "1988-11-20"); 
                ConvertUtils.register(new PointConverter(), Point.class);
                BeanUtils.copyProperty(u, "point", "12,23");
                
                User u2=new User();
                BeanUtils.copyProperties(u2, u);
                
                System.out.println(u.getName()+u.getBirth()+u.getPoint());
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
            
        }
    
    }
    ----------- 赠人玫瑰,手有余香     如果本文对您有所帮助,动动手指扫一扫哟   么么哒 -----------


    未经作者 https://www.cnblogs.com/xin1006/ 梦相随1006 同意,不得擅自转载本文,否则后果自负
  • 相关阅读:
    Daily Recording 2020/01/09(关键词:1月01版,RouterScan)
    SQL语句技巧(转)
    实施的WinForms键盘快捷键方法
    日常问题汇总(1) 分组筛选
    设计模式 创建型设计模式
    TSQL查询逻辑查询处理
    无法嵌入互操作类型错误处理
    设计模式 创建模式
    设计模式 结构模式
    设计模式 行为模式
  • 原文地址:https://www.cnblogs.com/xin1006/p/3338364.html
Copyright © 2011-2022 走看看