<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://www.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 這東西還不錯。  回復  更多評論
      

    主站蜘蛛池模板: 97se亚洲综合在线| 夭天干天天做天天免费看| 你懂的在线免费观看| 一级大黄美女免费播放| 精品久久久久亚洲| 亚洲av综合日韩| 黄色免费在线观看网址| 立即播放免费毛片一级| 免费一级全黄少妇性色生活片 | 在线播放高清国语自产拍免费 | 国产免费一区二区三区在线观看| 深夜免费在线视频| 久久国产精品免费一区| 一区二区三区无码视频免费福利| 国产麻豆成人传媒免费观看| 久久久久久AV无码免费网站下载| 99ee6热久久免费精品6| 午夜性色一区二区三区免费不卡视频| 免费观看无遮挡www的小视频| 久久福利资源网站免费看| 好大好硬好爽免费视频| 国产jizzjizz视频免费看| 亚洲国产精品成人AV在线| 亚洲人av高清无码| 一级毛片免费全部播放| 三年片在线观看免费西瓜视频| 59pao成国产成视频永久免费| 日本h在线精品免费观看| 永久免费无码网站在线观看| 亚洲AV无码之日韩精品| 亚洲情XO亚洲色XO无码| 亚洲人妻av伦理| 亚洲成AV人片在线观看WWW| 亚洲天堂一区二区三区| 亚洲AV成人一区二区三区观看| 成人精品综合免费视频| 久久精品电影免费动漫| 黄色成人网站免费无码av| 免费一级毛片正在播放| 亚洲AV无码一区东京热| 亚洲乱亚洲乱妇24p|