<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 閱讀(2416) 評論(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 這東西還不錯。  回復  更多評論
      

    主站蜘蛛池模板: 日本v片免费一区二区三区| 免费影院未满十八勿进网站| EEUSS影院WWW在线观看免费| 久久久久国产精品免费看| 亚洲无线码在线一区观看| 中文字字幕在线高清免费电影| 99re视频精品全部免费| 亚洲免费在线播放| 亚洲第一第二第三第四第五第六| 亚洲免费福利在线视频| 亚洲人片在线观看天堂无码| 久久亚洲免费视频| 亚洲第一精品电影网| 成人免费观看男女羞羞视频 | 特级精品毛片免费观看| 亚洲国产精品成人久久| 久久久免费的精品| 亚洲一区精彩视频| 精品熟女少妇av免费久久| 亚洲福利电影在线观看| 大地资源在线观看免费高清| 真人无码作爱免费视频| 亚洲人AV永久一区二区三区久久| 亚洲看片无码在线视频 | 一区二区免费国产在线观看| 自拍偷自拍亚洲精品情侣| 亚洲人AV在线无码影院观看| 国产jizzjizz免费看jizz| 狠狠色伊人亚洲综合网站色| 国产精品va无码免费麻豆| 久久99精品免费一区二区| 亚洲国产成人久久综合一 | 亚洲日韩精品一区二区三区 | 欧洲美熟女乱又伦免费视频| 亚洲精品一区二区三区四区乱码| 大地资源免费更新在线播放| CAOPORM国产精品视频免费| 久久青青草原亚洲av无码app| 久操免费在线观看| 亚洲AV永久无码天堂影院| 亚洲女初尝黑人巨高清|