• 内省—beanutils工具包


    Apache组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此在实际开发中很多程序员使用这套API操作JavaBean,以简化程序代码的编写。

    BeanUtils的作用:

    1)支持String到8种基本数据类型的转换;

    2)其他引用数据类型都需要注册转换器:ConvertUtils.register(Converter,Class);

    public class Person {
        private String name;
        private String password;
        private Integer age;
        private Date birthday;
        getter/setter
    }

    采用beanutils设置属性

    @Test
    public void test1() throws Exception {
        Person person = new Person();
        BeanUtils.setProperty(person, "name", "zhangsan");
        System.out.println(person.getName());
    }

    采用beanutils拷贝对象的属性(基本类型)

    @Test
    public void test2() throws Exception {
        String name = "zhangsan";
        String password = "123";
        String age = "34";
    
        Person person = new Person();
        BeanUtils.setProperty(person, "name", name);
        BeanUtils.setProperty(person, "password", password);
        BeanUtils.setProperty(person, "age", age);// 自动类型转换,只支持8种基本数据类型
    
        System.out.println(person);
    }

    采用beanutils拷贝对象的属性(非基本类型)

    @Test
    public void test3() throws Exception {
        String name = "zhangsan";
        String password = "123";
        String age = "34";
        String birthday = "1980-09-05";
    
        Person person = new Person();
        BeanUtils.setProperty(person, "name", name);
        BeanUtils.setProperty(person, "password", password);
        BeanUtils.setProperty(person, "age", age);// 自动类型转换
        BeanUtils.setProperty(person, "birthday", birthday); // 类型转换失败
        System.out.println(person);
    }

    为让Date能够赋值到birthday属性上,我们给beanutils注册一个日期转换器。

    改进代码如下:

    @Test
    public void test4() throws Exception {
        String name = "zhangsan";
        String password = "123";
        String age = "34";
        String birthday = "1980-09-05";
    
        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 (null == str || "".equals(str.trim())) {
                    return null;
                }
    
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                try {
                    return format.parse(str);
                } catch (ParseException e) {
                    throw new ConversionException(e);
                }
            }
    
        }, Date.class);
    
        Person person = new Person();
        BeanUtils.setProperty(person, "name", name);
        BeanUtils.setProperty(person, "password", password);
        BeanUtils.setProperty(person, "age", age);// 自动类型转换
        BeanUtils.setProperty(person, "birthday", birthday); 
        System.out.println(person);
    }

    采用beanutils自带的日期类型转换器

    @Test
    public void test5() throws Exception {
        String name = "zhangsan";
        String password = "123";
        String age = "34";
        String birthday = "1980-09-05";
    
        ConvertUtils.register(new DateLocaleConverter(), Date.class);
    
        Person person = new Person();
        BeanUtils.setProperty(person, "name", name);
        BeanUtils.setProperty(person, "password", password);
        BeanUtils.setProperty(person, "age", age);// 自动类型转换
        BeanUtils.setProperty(person, "birthday", birthday); 
        System.out.println(person);
    }

    收集数据到map中,并通过beanutils拷贝到指定的对象中去

    @Test
    public void test6() throws Exception {
    
        Person person = new Person();
    
        ConvertUtils.register(new DateLocaleConverter(), Date.class);
    
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("name", "aa");
        map.put("password", "123");
        map.put("age", 23);
        map.put("birthday", "1980-09-05");
    
        // 用map集合中的值,填充bean的属性,
        // 注意:属性名称必须要一致
        BeanUtils.populate(person, map);
    
        System.out.println(person);
    }
  • 相关阅读:
    mysql基础 MySql反向模糊查询
    mysql基础 函数
    html 标签的自定义属性应用
    mysql 分组后查询总行数,不使用子查询
    mysql基础 利用正则表达式判断数字
    网络工程师 教材目录
    Quatris
    BaseApplication Framework的skdCameraMan SdkTrayManager分析
    效率问题节点删除等
    ManulObject Ogre::RenderOperation::OT_TRIANGLE_STRIP
  • 原文地址:https://www.cnblogs.com/luogankun/p/3991464.html
Copyright © 2020-2023  润新知