BeanUtils使用总结(二)LazyDynaBean

LazyDynaBean   

     它实现一个动态的Bean,可以直接往里面加入属性,作为一个JavaBean一样使用,也可以用上面的BeanUtils或get/set方法进行操作,而不用事先定义一个标准的JavaBean类.
      记得在J2ee设计模式中有一种Value Object的模式,用于在MVC各层之间传递数据,避免直接传递大业务对象引起的性能问题,为了避免在项目中出现很多Bean类,在书中提供了一个动态Value Object的实现(通过扩展Map)。
      这里LazyDynaBean则可以作为一种更加成熟、稳定的实现来使用。

Java代码 复制代码
  1.      
  2. //这里使用LazyDynaMap,它是LazyBean的一个轻量级实现   
  3.   
  4.       LazyDynaMap dynaBean1 = new LazyDynaMap();    
  5.   
  6.       dynaBean1.set("foo""bar");                  // simple   
  7.   
  8.       dynaBean1.set("customer""title""Mr");        // mapped   
  9.   
  10.       dynaBean1.set("address"0"address1");         // indexed   
  11.   
  12.       System.out.println(dynaBean1.get("address",0));   
  13.     
  14.   
  15.       Map myMap = dynaBean1.getMap();           // retrieve the Map   
  16.   
  17.       System.out.println(myMap.toString());  
  
//这里使用LazyDynaMap,它是LazyBean的一个轻量级实现

      LazyDynaMap dynaBean1 = new LazyDynaMap(); 

      dynaBean1.set("foo", "bar");                  // simple

      dynaBean1.set("customer", "title", "Mr");        // mapped

      dynaBean1.set("address", 0, "address1");         // indexed

      System.out.println(dynaBean1.get("address",0));
 

      Map myMap = dynaBean1.getMap();           // retrieve the Map

      System.out.println(myMap.toString());

 上面的例子可以看到,它可以在set时自动增加bean的property(既赋值的同时增加Bean中的property),
  同时也支持3中类型的property,并且LazyDynaMap还可以导出为map。

 

对于这个类还有两个重要的Field要注意:

      (1) returnnull——指定在get方法使用了一个没有定义过的property时,DynaBean的行为。

            //设为ture。若Bean中没有此字段,返回null,默认为false。若Bean中没有此字段,自动增加一个

               dynaBean1.setReturnNull(true);

            System.out.println(dynaBean1.get("aaa"));//此时返回null

      (2) Restricted——指定是否允许改变这个bean的property

   //默认为false,允许增删和修改

      dynaBean1.setRestricted(true);

      dynaBean1.set("test","error");//这里会出错!

       通过设置这两个属性,可以防止意外修改DynaBean的property。在设计架构时,你可以在后台从数据表或xml文件自动产生DynaBean,在传到控制层和表示层之前设置上述属性使其Bean结构不允许修改,如此就不可能无意中修改Bean包含的属性……这样既可以享用它的便利,有可以防止由此引入的错误可能。

 

以下附上上几个 LazyDynaBean 的使用示例:

(1)普通bean

Java代码 复制代码
  1. import java.util.GregorianCalendar;   
  2. import org.apache.commons.beanutils.LazyDynaBean;   
  3. import org.apache.commons.beanutils.BeanUtils;   
  4.   
  5. public class BeanUtilsExample2 {   
  6.     //动态创建属性   
  7.     public static void main(String args[]) throws Exception {   
  8.   
  9.         LazyDynaBean hh = new LazyDynaBean();   
  10.         hh.set("country""中国");   
  11.         hh.set("city""北京");   
  12.         hh.set("postCode""100120");   
  13.         hh.set("addr""aaaaaaa");   
  14.   
  15.         LazyDynaBean bb = new LazyDynaBean();   
  16.         bb.set("phone""home""11011011");   
  17.         bb.set("phone""office""111111");   
  18.         bb.set("email""sh@126.com");   
  19.         bb.set("address"0, hh);   
  20.         bb.set("birthDate"new GregorianCalendar(1990329).getTime());   
  21.   
  22.         LazyDynaBean tt = new LazyDynaBean();   
  23.         tt.set("userId"new Long(8888888));   
  24.         tt.set("gggg""施杨");   
  25.         tt.set("password""sgsgsgsg");   
  26.         tt.set("dddd", bb);   
  27.   
  28.         System.out.println(BeanUtils.getProperty(tt, "gggg"));   
  29.         System.out.println(BeanUtils.getProperty(tt, "dddd.birthDate"));   
  30.         System.out.println(BeanUtils.getProperty(tt,   
  31.                 "dddd.address[0].addr"));   
  32.         System.out   
  33.                 .println(BeanUtils.getProperty(tt, "dddd.phone(office)"));   
  34.     }   
  35. }  
import java.util.GregorianCalendar;
import org.apache.commons.beanutils.LazyDynaBean;
import org.apache.commons.beanutils.BeanUtils;

public class BeanUtilsExample2 {
    //动态创建属性
    public static void main(String args[]) throws Exception {

        LazyDynaBean hh = new LazyDynaBean();
        hh.set("country", "中国");
        hh.set("city", "北京");
        hh.set("postCode", "100120");
        hh.set("addr", "aaaaaaa");

        LazyDynaBean bb = new LazyDynaBean();
        bb.set("phone", "home", "11011011");
        bb.set("phone", "office", "111111");
        bb.set("email", "sh@126.com");
        bb.set("address", 0, hh);
        bb.set("birthDate", new GregorianCalendar(1990, 3, 29).getTime());

        LazyDynaBean tt = new LazyDynaBean();
        tt.set("userId", new Long(8888888));
        tt.set("gggg", "施杨");
        tt.set("password", "sgsgsgsg");
        tt.set("dddd", bb);

        System.out.println(BeanUtils.getProperty(tt, "gggg"));
        System.out.println(BeanUtils.getProperty(tt, "dddd.birthDate"));
        System.out.println(BeanUtils.getProperty(tt,
                "dddd.address[0].addr"));
        System.out
                .println(BeanUtils.getProperty(tt, "dddd.phone(office)"));
    }
}

 (2)、连接Mysql数据库

Java代码 复制代码
  1. import java.sql.PreparedStatement;   
  2. import java.sql.ResultSet;   
  3. import java.sql.SQLException;   
  4. import java.util.Iterator;   
  5. import org.apache.commons.beanutils.DynaBean;   
  6. import org.apache.commons.beanutils.ResultSetDynaClass;   
  7.   
  8. public class BeanUtilsExample3 {   
  9.     public static void main(String args[]) throws Exception {   
  10.         Connection conn = getConnection();   
  11.         PreparedStatement ps = conn   
  12.                 .prepareStatement("select id,title,time from guestbook2 order by id desc");   
  13.         ResultSet rs = ps.executeQuery();   
  14.   
  15.         ResultSetDynaClass rsdc = new ResultSetDynaClass(rs);//重点,二次封装,对连接对象有依赖   
  16.         Iterator itr = rsdc.iterator();   
  17.         while (itr.hasNext()) {   
  18.             DynaBean bean = (DynaBean) itr.next();   
  19.             System.out.print(bean.get("id") + "\t");   
  20.             System.out.print(bean.get("title") + "\t");   
  21.             System.out.println(bean.get("time"));   
  22.         }   
  23.         conn.close();   
  24.     }   
  25.   
  26.     private static Connection getConnection() {   
  27.         String url = "jdbc:mysql://localhost:3306/guestbook";   
  28.         String username = "root";   
  29.         String password = "hicc";   
  30.         Connection conn = null;   
  31.         try {   
  32.             Class.forName("com.mysql.jdbc.Driver");   
  33.             conn = DriverManager.getConnection(url, username, password);   
  34.         } catch (ClassNotFoundException e) {   
  35.             e.printStackTrace();   
  36.         } catch (SQLException e) {   
  37.             e.printStackTrace();   
  38.         }   
  39.         return conn;   
  40.     }   
  41. }  
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.ResultSetDynaClass;

public class BeanUtilsExample3 {
    public static void main(String args[]) throws Exception {
        Connection conn = getConnection();
        PreparedStatement ps = conn
                .prepareStatement("select id,title,time from guestbook2 order by id desc");
        ResultSet rs = ps.executeQuery();

        ResultSetDynaClass rsdc = new ResultSetDynaClass(rs);//重点,二次封装,对连接对象有依赖
        Iterator itr = rsdc.iterator();
        while (itr.hasNext()) {
            DynaBean bean = (DynaBean) itr.next();
            System.out.print(bean.get("id") + "\t");
            System.out.print(bean.get("title") + "\t");
            System.out.println(bean.get("time"));
        }
        conn.close();
    }

    private static Connection getConnection() {
        String url = "jdbc:mysql://localhost:3306/guestbook";
        String username = "root";
        String password = "hicc";
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

 

 

 

Java代码 复制代码
  1. import java.sql.Connection;   
  2. import java.sql.DriverManager;   
  3. import java.sql.PreparedStatement;   
  4. import java.sql.ResultSet;   
  5. import java.sql.SQLException;   
  6. import java.util.Iterator;   
  7. import org.apache.commons.beanutils.DynaBean;   
  8. import org.apache.commons.beanutils.RowSetDynaClass;   
  9.   
  10. public class BeanUtilsExample4 {   
  11.     public static void main(String args[]) throws Exception {   
  12.         Connection conn = getConnection();   
  13.         PreparedStatement ps = conn   
  14.                 .prepareStatement("select id,title,time from guestbook2 order by id desc");   
  15.         ResultSet rs = ps.executeQuery();   
  16.   
  17.         RowSetDynaClass rsdc = new RowSetDynaClass(rs);   
  18.         //重点,与ResultSetDynaClass的区别   
  19.         conn.close();//重点,关闭连接后仍能读取   
  20.         Iterator itr = rsdc.getRows().iterator();   
  21.         while (itr.hasNext()) {   
  22.             DynaBean bean = (DynaBean) itr.next();   
  23.             System.out.print(bean.get("id") + "\t");   
  24.             System.out.print(bean.get("title") + "\t");   
  25.             System.out.println(bean.get("time"));   
  26.         }   
  27.     }   
  28.   
  29.     private static Connection getConnection() {   
  30.         String url = "jdbc:mysql://localhost:3306/guestbook";   
  31.         String username = "root";   
  32.         String password = "hicc";   
  33.         Connection conn = null;   
  34.         try {   
  35.             Class.forName("com.mysql.jdbc.Driver");   
  36.             conn = DriverManager.getConnection(url, username, password);   
  37.         } catch (ClassNotFoundException e) {   
  38.             e.printStackTrace();   
  39.         } catch (SQLException e) {   
  40.             e.printStackTrace();   
  41.         }   
  42.         return conn;   
  43.     }   
  44. }  
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.RowSetDynaClass;

public class BeanUtilsExample4 {
    public static void main(String args[]) throws Exception {
        Connection conn = getConnection();
        PreparedStatement ps = conn
                .prepareStatement("select id,title,time from guestbook2 order by id desc");
        ResultSet rs = ps.executeQuery();

        RowSetDynaClass rsdc = new RowSetDynaClass(rs);
        //重点,与ResultSetDynaClass的区别
        conn.close();//重点,关闭连接后仍能读取
        Iterator itr = rsdc.getRows().iterator();
        while (itr.hasNext()) {
            DynaBean bean = (DynaBean) itr.next();
            System.out.print(bean.get("id") + "\t");
            System.out.print(bean.get("title") + "\t");
            System.out.println(bean.get("time"));
        }
    }

    private static Connection getConnection() {
        String url = "jdbc:mysql://localhost:3306/guestbook";
        String username = "root";
        String password = "hicc";
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值