BeanUtils —— 操做JavaBean 工具 學習筆記

 

本文查閱方法:
一、查閱目錄 —— 查閱本文目錄,肯定想要查閱的目錄標題
二、快捷「查找」 —— 在當前瀏覽器頁面,按鍵 「Ctrl+F」 按鍵組合,開啓瀏覽器的查找功能,
             在查找搜索框中 輸入須要查閱的 目錄標題,即可以直接到達 標題內容 的位置。
三、學習小結 —— 文中的學習小結內容,是筆者在學習以後總結出的,開發時可直接參考其進行應用開發的內容, 進一步加快了本文的查閱 速度。(水平有限,僅供參考。)   程序員

 


 

本文目錄瀏覽器

    學習小結框架

    一、JavaBean屬性操做—beanutils工具包工具

    二、BeanUtils 使用方法——直接使用 API 中 定義靜態方法學習

    三、ConvertUtils 使用方法ui

    四、Demo樣例 編碼

 


學習小結.net

  使用BeanUtils的步驟:orm

    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或自定義)

 


 

一、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) 

 


 

二、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 。 


三、ConvertUtils 使用方法

    一、註冊轉換器 —— ConvertUtils.regsiter(Converter 轉換器convert, Class 目標類型clazz)  

        備註:參數「轉換器convert」,既能夠用BeanUtils中自帶的轉換器,亦能夠用自定義的類型轉換器。 

    二、自定義轉換器(可以使用匿名內部類的寫法,直接在 編碼中 書寫)

        new Converter (){ // 下面是自定義的類型轉換器。
              public Object convert(Class type, Object value) {

                    //自定義的 實現類型轉換的內容代碼

                }

        }


 

四、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)若您以爲本文 沒用處  —— 請留言評論,筆者將會改進不足,以便爲你們整理更加好用的筆記。

相關文章
相關標籤/搜索