• Java——BeanUtils基本用法


            为了操作JavaBean的属性,sun公司自己写了一套内省的api(在Java.beans.*)中,但是我们发现操作起来还是比较复杂的,所以apache公司就自己写了一套api替代了它,大大方便了开发者去调用,并大大的提高了效率。接下来我们通过几个demo来简单的熟悉一下这套api,首先你需要准备两个jar包(commons-logging.jar和org.apache.commons.beanutils.jar)。

    1.创建一个简单的JavaBean Student

    package com.day09;
    
    import java.util.Date;
    
    public class Student {
    
        @Override
        public String toString() {
            return "Student [name=" + name + ", password=" + password + ", age=" + age + ", birthday=" + birthday + "]";
        }
    
        private String name;
        private String password;
        private int age;
        private Date birthday;
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        protected String getNames() {
            return name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }

    2.通过junit的方式进行方法测试

    package com.day09;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Locale;
    import java.util.Map;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.commons.beanutils.ConversionException;
    import org.apache.commons.beanutils.ConvertUtils;
    import org.apache.commons.beanutils.Converter;
    import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
    import org.junit.Test;
    
    /**
     * apache感觉Java的内省api写的太麻烦了,自己开发了一套api就是BeanUtils,大大的简化了内省操作Javabean的属性,提高了效率
     * 
     * @author Administrator
     *
     */
    public class BeanUtilsDemo {
        /**
         * 使用BeanUtils来给属性设置
         * 
         * @throws Exception
         */
        @Test
        public void setProperties() throws Exception {
            Student s = new Student();
            // 传入bean的对象,属性名,属性值即可
            BeanUtils.setProperty(s, "age", 23);
            System.out.println(s.getAge());
        }
    
        /**
         * BeanUtils支持8中基本数据类型进行数据转换(从String转换到对应的八种基本数据类型)
         * 
         * @throws Exception
         */
        @Test
        public void setPropertiesOnBaseDataType() throws Exception {
            String name = "zhangsan";
            String password = "123456";
            String age = "23";
            Student s = new Student();
            BeanUtils.setProperty(s, "name", name);
            BeanUtils.setProperty(s, "password", password);
            BeanUtils.setProperty(s, "age", age);
            System.out.println(s);
        }
    
        /**
         * BeanUtis虽然支持8中基本类型,但是它可提供了注册转换器机制,可以让除8中基本类型之外的其他类型也可以自动转换
         * 
         * @throws Exception
         */
        @Test
        public void setPropertiesOnDateType() throws Exception {
            String birthday = "1993-9-25";
            Student s = new Student();
            // 为了让日期赋值到bean的属性上,我们需要给Date注册一个日期转换器
            ConvertUtils.register(new Converter() {
    
                @Override
                public Object convert(Class type, Object value) {
                    if (value == null) {
                        return null;
                    }
                    if (!(value instanceof String)) {
                        throw new ConversionException("只支持String类型");
                    }
                    String str = (String) value;
                    if ("".equals(str.trim())) {
                        return null;
                    }
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    try {
                        return sdf.parse(str);
                    } catch (ParseException e) {
                        throw new RuntimeException(e);// 要带上e,因为异常链不能断
                    }
                }
            }, Date.class);
            BeanUtils.setProperty(s, "birthday", birthday);
            System.out.println(s.getBirthday());
        }
    
        /**
         * BeanUtis虽然支持8中基本类型,但是它可提供了注册转换器机制,可以让除8中基本类型之外的其他类型也可以自动转换
         * 
         * @throws Exception
         */
        @Test
        public void setPropertiesOnDateType2() throws Exception {
            Student s = new Student();
    
            String birthday = "1993-09-25";
            // 为了让日期赋值到bean的属性上,我们需要给Date注册一个日期转换器,而BanUtils框架也为我们提供了一个日期转换器
            ConvertUtils.register(new DateLocaleConverter(Locale.CHINESE, "yy-MM-dd"), Date.class);
            BeanUtils.setProperty(s, "birthday", birthday);
            System.out.println(s.getBirthday());
        }
    
        /**
         * 从map集合上做数据的映射
         * 
         * @throws Exception
         * @throws IllegalAccessException
         */
        @Test
        public void setPropertiesOnMap() throws IllegalAccessException, Exception {
            Student s = new Student();
            Map<String, String> map = new HashMap<String, String>();
            // 这里同样要注册一个日期转换器
            ConvertUtils.register(new DateLocaleConverter(Locale.CHINESE, "yy-MM-dd"), Date.class);
            map.put("name", "zhangsan");
            map.put("age", "23");
            map.put("birthday", "1993-9-25");
            BeanUtils.populate(s, map);
            System.out.println(s);
        }
    }

    至此,我们已将常见的几种通过反射获得类中字段的方法演示完毕,有不足的地方,希望大家多多提意见!

  • 相关阅读:
    Solaris下批量kill掉oracle的session
    我写blog的方式变迁
    filezilla ftp client在win7 下获取ftp目录信息出错解决方法
    GNU System Monitor编译问题
    在vmware的Solaris虚拟机中安装vmtool
    关于golden gate director client的一点点使用总结
    测试 乱弹
    ORM的世界 (再补充)
    Yahoo Konfabulator
    轻量容器和注射依赖 的自实现
  • 原文地址:https://www.cnblogs.com/nanyangke-cjz/p/7110217.html
Copyright © 2020-2023  润新知