beanUtils 使用

beanUtils简介

commons-beanutils 是apache commons子项目中的一个软件包,其主要目的是利用反射机制对JavaBean的属性进行处理。beanUtils包下载链接:[http://download.csdn.net/detail/macanv/9542584 "下载"](http://download.csdn.net/detail/macanv/9542584 "下载")

beanUtils 给对象赋值

首先,我们有一个自定义的数据类型,例如我写的Emp数据结构:
package com.macan.beanUnit;

import java.util.Date;

/**
 * 
 * @author macan
 *  自定义Emp数据类型。
 */
public class Emp {
    private int id;
    private String name;
    private float salary;
    //private Date birthday;

    //get && set methods
    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;
    }
    public float getSalary() {
        return salary;
    }
    public void setSalary(float salary) {
        this.salary = salary;
    }

    //重写toString 方法
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "id = " + id + ", name = " + name + ", salary = " + salary + ", birthday " + birthday.toString();

    }
}

一般我们从网络或者其他地方获取数据的时候,数据类型可能都是String类型的,因为这样表示起来很方便,但是在进行给对象赋值的时候就可能遇到类型转换等问题,一般别人用的不爽的时候,就会出现万能的神说这里需要一个框架,于是beanUtils出现了,下面演示如何使用beanUtils给对象各个属性赋值的案例:

package com.macan.beanUnit;

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

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.junit.Test;

public class BeanUtilss {   
    @Test
    public void testBeanUtils() throws Exception {
        String id = "110";
        String name = "macan";
        String salary = "11.2";

        Emp emp =  new Emp();

        BeanUtils.setProperty(emp, "id", id);
        BeanUtils.setProperty(emp, "name", name);
        BeanUtils.setProperty(emp, "salary", salary);

        System.out.println(emp);
    }
}

上面的代码使用JUnit测试框架,不懂得可以自行Google,测试运行输出如下:
这里写图片描述
可以看到beanUtils可以让我们不用关心数据类型而转换。但是,beanUtils并不是万能的,它支持的数据类型有限,具体看下面。

benaUtils从对象中取值

既然能赋值,自然能够取值,取值的示例代码如下:

    String name2 = BeanUtils.getProperty(emp, "name");
    System.out.println(name2);

beanUtils给不支持的数据类型赋值

上面提到了beanUtils不支持所有的数据类型的赋值与解析,下面列出了Java中beanUtils能够解析的数据类型:
java.lang.BigDecimal
java.lang.BigInteger
boolean and java.lang.Boolean
byte and java.lang.Byte
char and java.lang.Character
java.lang.Class
double and java.lang.Double
float and java.lang.Float
int and java.lang.Integer
long and java.lang.Long
short and java.lang.Short
java.lang.String
java.sql.Date
java.sql.Time
java.sql.Timestamp

但是对于不支持的数据类型呢?beanUtils提供了ConvertUtils类,其中的register()方法来自定义数据类型的解析,方法原型:

public static void register(Converter converter, Class clazz) {   
                                    ConvertUtilsBean.getInstance().register(converter, clazz);
 }

这里就简单地给出一个util.date数据类型的解析,这里任然使用上面使用过的Emp类来做测试类,添加String birthday 属性。测试代码如下:

package com.macan.beanUnit;

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

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.junit.Test;

public class BeanUtilss {   
    @Test
    public void testBeanUtils() throws Exception {
        String id = "110";
        String name = "macan";
        String salary = "11.2";
        String birthday = "1992-10-15"; //新加


        Emp emp =  new Emp();

        //使用内部内实现converter 接口,可以实现非简单数据类型的转换
        ConvertUtils.register(new Converter() {

            @Override
            /**
             * @type : 传入的数据类型
             * @values: 传入的值
             */
            public Object convert(Class type, Object value) {
                // TODO Auto-generated method stub
                Date date = null;
                try {
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                    date = (Date) dateFormat.parse((String)value);
                } catch (ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return date;
            }
        }, Date.class);

        BeanUtils.setProperty(emp, "id", id);
        BeanUtils.setProperty(emp, "name", name);
        BeanUtils.setProperty(emp, "salary", salary);
        BeanUtils.setProperty(emp, "birthday", birthday);

        System.out.println(emp);
    }
}

自此,beanUtils的简单使用已经介绍完了,如果你有什么问题或者有什么建议,请给我留言,一起学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值