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

    主站蜘蛛池模板: 久久亚洲综合色一区二区三区| 国产精品免费视频网站| 亚洲女久久久噜噜噜熟女| 亚洲av永久中文无码精品| 最新中文字幕电影免费观看| 亚洲av午夜精品无码专区| 美女视频黄免费亚洲| 亚洲永久在线观看| 成全影视免费观看大全二| 亚洲区日韩精品中文字幕| 午夜老司机免费视频| 精品国产亚洲AV麻豆| 亚洲精品第一国产综合境外资源| 黄色网址大全免费| 亚洲一区二区高清| 免费无码又爽又刺激一高潮| 久久亚洲私人国产精品vA | 亚洲成AV人片一区二区| 免费在线看污视频| 亚洲欧洲精品久久| 67194成是人免费无码| 久久亚洲AV成人无码国产最大| 在线免费观看国产视频| 一个人看的免费视频www在线高清动漫| 亚洲片一区二区三区| 日本一卡精品视频免费| 亚洲熟女www一区二区三区| 可以免费观看一级毛片黄a| 日韩电影免费在线观看中文字幕| 亚洲天堂福利视频| 成人亚洲综合天堂| 99久久综合精品免费| 337p日本欧洲亚洲大胆人人 | 国产人成免费视频| a级毛片无码免费真人久久| 亚洲国产综合人成综合网站00| 日韩成全视频观看免费观看高清| 91成人免费观看在线观看| 色噜噜亚洲男人的天堂| 国产成人综合亚洲AV第一页| 在线看免费观看AV深夜影院|