<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    rethink

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      11 隨筆 :: 0 文章 :: 16 評論 :: 0 Trackbacks
    根據Common BeanUtils的用戶指南學習了很多有用的工具類.

    參考:http://commons.apache.org/beanutils/apidocs/org/apache/commons/beanutils/package-summary.html#package_description


    1. 屬性的存取

    簡單式:

    PropertyUtils.getSimpleProperty(Object bean, String name)
    PropertyUtils.setSimpleProperty(Object bean, String name, Object value)


    索引式:
    PropertyUtils.getIndexedProperty(Object bean, String name)
    PropertyUtils.getIndexedProperty(Object bean, String name, int index)
    PropertyUtils.setIndexedProperty(Object bean, String name, Object value)
    PropertyUtils.setIndexedProperty(Object bean, String name, int index, Object value)

    Map式:

    PropertyUtils.getMappedProperty(Object bean, String name)
    PropertyUtils.getMappedProperty(Object bean, String name, String key)
    PropertyUtils.setMappedProperty(Object bean, String name, Object value)
    PropertyUtils.setMappedProperty(Object bean, String name, String key, Object value)


    嵌套式:
    PropertyUtils.getNestedProperty(Object bean, String name)
    PropertyUtils.setNestedProperty(Object bean, String name, Object value)


    通用式:
    PropertyUtils.getProperty(Object bean, String name)
    PropertyUtils.setProperty(Object bean, String name, Object value)


    發現通用式最方便,可以替代上面所有的方式(搞不懂為啥還要弄那么多)。

    舉例:
    //簡單式
    System.out.println(PropertyUtils.getProperty(employee1, "lastName"));

    //索引式
    System.out.println(PropertyUtils.getProperty(employee1,"addr[0].city"));

    //Map式
    PropertyUtils.setProperty(employee1, "telphone(tel)""test1");
    System.out.println(PropertyUtils.getProperty(employee1, 
    "telphone(tel)"));

    //嵌套式
    String address = (String) PropertyUtils.getProperty(employee1, "address.addr");
    System.out.println(address);



    2. 動態Beans

    基本式:(需要先定義屬性然后才能使用,不推薦)

    BasicDynaBean and BasicDynaClass


    包裝ResultSet式:(必須打開數據庫連接可以使用,不推薦)

    ResultSetDynaClass


    包裝RowSet式:(可以不用打開連接使用,推薦)

    RowSetDynaClass

    舉例:

            
    try {
                Class.forName(
    "com.microsoft.jdbc.sqlserver.SQLServerDriver");
                Connection conn 
    = DriverManager.getConnection(
                                
    "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=java",
                                
    "sa""sa");
                Statement stmt 
    = conn.createStatement();
                ResultSet rs 
    = stmt.executeQuery("select code,name from role");
                RowSetDynaClass rsdc 
    = new RowSetDynaClass(rs);
                rs.close();
                stmt.close();
           
                List rows 
    = rsdc.getRows();
                
    for (Object object : rows) {
                    DynaBean row 
    = (DynaBean) object;
                    System.out.println(
    "Role code is " +
                                       row.get(
    "code"+
                                       
    " and name is " + row.get("name"));
                }
               
            } 
    catch (ClassNotFoundException e) {
                
    // TODO Auto-generated catch block
                e.printStackTrace();
            } 
    catch (SQLException e) {
                
    // TODO Auto-generated catch block
                e.printStackTrace();
            }

    懶加載式:(方便實用,重點推薦)

    LazyDynaBean

    舉例:

    LazyDynaBean ldb 
    = new LazyDynaBean();
    ldb.set(
    "test1""tt");
    ldb.set(
    "test2"null);
    ldb.set(
    "test3"new Employee());
    System.out.println(ldb.get(
    "test1"));
    System.out.println(ldb.get(
    "test2"));//null
    System.out.println(ldb.get("test3"));//顯示Employee.toString()信息

     并且也具有LazyDynaMap的功能。


    3. 數據類型的轉換

    重點推薦BeanUtils.populate方法。

    舉例:

            Address bean 
    = new Address();
            HashMap map 
    = new HashMap();
            map.put(
    "zipCode1""zipCode");
            map.put(
    "addr"new Long(1234));
            map.put(
    "city""");
            map.put(
    "country""country");
            System.out.println(bean);
            
    try {
                BeanUtils.populate(bean, map);
            } 
    catch (IllegalAccessException e) {
                
    // TODO Auto-generated catch block
                e.printStackTrace();
            } 
    catch (InvocationTargetException e) {
                
    // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(bean);

     常利用在action填充vo時。


    在學習當中,發現了兩位前輩的類似總結,寫得很好。

    http://m.tkk7.com/sean/articles/Jakarta_Commons_Notes.html

    http://calvin.javaeye.com/blog/92035

    省了我不少時間,呵呵。



    posted on 2008-09-28 16:45 rethink 閱讀(2409) 評論(2)  編輯  收藏 所屬分類: java

    評論

    # re: 學習Common BeanUtils 2008-09-28 23:06 stone2083
    推薦使用cglib的beancopier替代beanutil做copy工作。  回復  更多評論
      

    # re: 學習Common BeanUtils 2008-10-03 09:57 隔葉黃鶯
    LazyDynaBean 在 Struts 1.3 開始也用,免去了聲明動態 Formbean 的屬性聲明。

    RowSetDynaClass 這東西還不錯。  回復  更多評論
      

    主站蜘蛛池模板: 亚洲成av人片不卡无码久久| 无码人妻久久一区二区三区免费丨 | 大学生美女毛片免费视频| 久久久久亚洲av无码专区蜜芽| 中文字幕亚洲综合精品一区| 丝袜捆绑调教视频免费区| 国产亚洲精品久久久久秋霞| 九九热久久免费视频| 亚洲色欲久久久综合网东京热| 亚洲最大黄色网站| 日本免费人成在线网站| 亚洲噜噜噜噜噜影院在线播放| 精品国产免费一区二区三区| 亚洲色大成网站WWW久久九九| 亚洲国产精品18久久久久久| 免费一级毛片女人图片| 亚洲精品偷拍视频免费观看| 国产精品美女午夜爽爽爽免费| 精品国产_亚洲人成在线高清| 亚洲乱码日产精品一二三| 精品国产免费观看一区| 三级片免费观看久久| 91麻豆国产自产在线观看亚洲| 久久精品亚洲日本波多野结衣| 999在线视频精品免费播放观看| 国产av无码专区亚洲av桃花庵| 直接进入免费看黄的网站| 国产国拍亚洲精品福利| 久久精品国产亚洲av品善| 2022中文字字幕久亚洲| 久久精品国产大片免费观看| 亚洲AV无码专区在线亚| 亚洲AV无码专区日韩| 无码精品人妻一区二区三区免费看 | 亚洲人成无码网站在线观看| 亚洲精品第一国产综合精品99| 日韩亚洲国产高清免费视频| 国产精品V亚洲精品V日韩精品| 免费人成视频在线观看免费| 亚洲AV日韩精品久久久久久久 | 亚洲熟妇AV乱码在线观看|