欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

BeanUtils —— 操作JavaBean 工具 学习笔记

程序员文章站 2022-04-23 22:01:19
...

 

本文查阅方法:
1、查阅目录 —— 查阅本文目录,确定想要查阅的目录标题
2、快捷“查找” —— 在当前浏览器页面,按键 “Ctrl+F” 按键组合,开启浏览器的查找功能,
             在查找搜索框中 输入需要查阅的 目录标题,便可以直接到达 标题内容 的位置。
3、学习小结 —— 文中的学习小结内容,是笔者在学习之后总结出的,开发时可直接参考其进行应用开发的内容, 进一步加快了本文的查阅 速度。(水平有限,仅供参考。)  

 


 

本文目录

    学习小结

    1、JavaBean属性操作—beanutils工具包

    2、BeanUtils 使用方法——直接使用 API 中 定义静态方法

    3、ConvertUtils 使用方法

    4、Demo样例 

 


学习小结

  使用BeanUtils的步骤:

    a.导包——导入两个Jar包commons-beanutils-1.8.3.jar 和支持包commons-logging-1.1.1.jar 

    b.操作——直接使用其定义的静态方法操作Bean的属性(具体方法可查阅其文档)

       (a)给指定Bean的属性赋值 —— 

           BeanUtils.setProperty(Object 目标bean, String 指定属性的name, Object 实际参数值value) 

       (b)获取指定Bean的属性赋值 —— 

                 BeanUtils.getProperty(Object 目标 bean, String 指定属性的 name)

       (c)将Map中的“键值对”数据 全部填充到指定的 JavaBean(对应属性名)中 ——           

                ​ BeanUtils.populate(Object 目标  bean, Map 存储有源数据的 map 对象);       

    c.注册转换器——自动类型转换,除8种基本类型外,其他复杂类型要事先注册类型转换器(API或自定义)

 


 

1、JavaBean属性操作—beanutils工具包

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

导入包:a.在工程下新建lib目录,导入commons-beanutils-1.8.3.jar 和支持包commons-logging-1.1.1.jar

        b.选中两个包,右键build path/add to build path

Beanutils工具包的常用类:

    BeanUtils —— 操作JavaBean 中的属性 赋值与取值。

    PropertyUtils

    ConvertUtils —— 操作类型转换器。

    自定义转换器:ConvertUtils.regsiter(Converter convert, Class clazz) 

 


 

2、BeanUtils 使用方法——直接使用 API 中 定义静态方法

    a.给指定Bean的属性赋值 —— 

         BeanUtils.setProperty(Object 目标bean, String 指定属性的name, Object 实际参数值value) 

         备注:仅支持 8中基本类型数据 自动转换 :字符串-- 属性类型

                其他复杂类型的 自动转换,需要实现 注册 类型转换器Converter。

    b.获取指定Bean的属性赋值 —— 

         BeanUtils.getProperty(Object 目标 bean, String 指定属性的 name)

    c.将Map中的“键值对”数据 全部填充到指定的 JavaBean(对应属性名)中            

         BeanUtils.populate(Object 目标  bean, Map 存储有源数据的 map 对象);

        备注:使用该方法时,须确保Map中键名称 与 Bean中 属性名称 是相同的,否则就会 赋值为 null 。 


3、ConvertUtils 使用方法

    1、注册转换器 —— ConvertUtils.regsiter(Converter 转换器convert, Class 目标类型clazz)  

        备注:参数“转换器convert”,既可以用BeanUtils中自带的转换器,亦可以用自定义的类型转换器。 

    2、自定义转换器(可使用匿名内部类的写法,直接在 编码中 书写)

        new Converter (){ // 下面是自定义的类型转换器。
              public Object convert(Class type, Object value) {

                    //自定义的 实现类型转换的内容代码

                }

        }


 

4、Demo样例: 

//使用beanUtils操纵bean的属性 ( 第三方)

public class Demo1 {

  @Test

  public void test1() throws Exception{

    Person p=new Person();

    BeanUtils.setProperty(p, "age", 456);

    System.out.println(p.getAge());//456

  }

  @Test

  public void test2() throws Exception{

    String name="aaaa";

    String age="123";

    String password="pw";

 

    Person p=new Person();

    //支持8种基本类型自动转换,其他复杂类型的 转换,需要 编写 并且注册类型转换器,最常见的日起类型的 转换器。

    BeanUtils.setProperty(p, "name", name);

    BeanUtils.setProperty(p, "age", age);

    BeanUtils.setProperty(p, "password", password);

 

    System.out.println(p.getName());//aaaa

    System.out.println(p.getAge());//123

    System.out.println(p.getPassword());//pw

 

  }

  @Test

  public void test3() throws Exception{

 

    String birthday="1983-12-1";

 

    //为了让日期赋值到bean的birthday属性上,需要在 beanUtils中 注册一个日期转换器,以便在需要转换时自动调用。可查 BeanUtil 的文档。

    //ConvertUtils.register(converter, clazz);    

    ConvertUtils.register(new Converter(){  // 下面是自定义的类型转换器。

 

      public Object convert(Class type, Object value) {

        if(value==null) return null;

        if(!(value instanceof String)){

          throw new ConversionException("只支持String类型的转换");//可查文档,此异常父类是RunnableTimeException

        }

        String str=(String)value;

        if(str.trim().equals("")) return null;

        SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd",Locale.US);

        try {

          return df.parse(str); //此语句将会抛出异常,但是由于 子类不能抛出比父类更多的异常,所以只能catch

        } catch (ParseException e) {

          throw new RuntimeException(e);  //抛出运行时异常并停止程序的执行,以便通知上层异常信息,

                  //并建议其修改代码,以期提高代码的严谨性。        

        }

      }

    }, Date.class);

    Person p=new Person();

    BeanUtils.setProperty(p, "birthday", birthday);//因上面注册了“字符串--日起类型” 的类型转换器,故此就不会报错异常了。

    System.out.println(p.getBirthday());//pw

    System.out.println("___"+BeanUtils.getProperty(p, "birthday"));

    /*

       关于转换器:BeanUtils已经为 Converter接口 编写很多的转换器,

       可查阅文档中All Known Implementing Classes:中所提示的各种框架自带转换器。

       注:其中DateLocalConverter转换器,是针对中文样式的,但是里面有Bug:当输入的字符串类型 的日期参数值为" "时,就会抛出异常,

           可考虑在编码时避免传入" " 值,就可以直接使用该转换器

           Demo: ConvertUtils.register(new DateLocalConverter(), Date.class);  

            仅需要 这一句代码 就可以实现中文样式的 “字符串--日期” 的类型转换器:

    */ 

  }

  public void test5() throws Exception {

    Map map=new HashMap();

    map.put("name", "aaa");

    map.put("password", "123");

    map.put("brithday", "1980-09-09");

    ConvertUtils.register(new DateLocaleConverter(), Date.class);

    Person p=new Person();

    //用map集合填充bean属性,map关键字和bean属性要一致

    BeanUtils.populate(p, map);

  }

}

 

 


 

 
敬请评论

(1)若您觉得本文 有用处  —— 请留言评论,以坚定其他 IT童鞋 阅读本文的信心。

(2)若您觉得本文 没用处  —— 请留言评论,笔者将会改进不足,以便为大家整理更加好用的笔记。