`

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 楼 a1641693970 2018-07-29  
还不错,学习了

相关推荐

    commons-beanutils使用工具包

    commons-beanutils使用工具包

    beanutils使用

    beanutils使用的一个小例子,主要完成一个map转化成一个bean的过程

    BeanUtils用法

    BeanUtils用法

    使用servlet实现注册&登录&解决注册乱码&beanutils;的使用

    使用servlet实现注册&登录&解决注册乱码&beanutils;的使用

    commons-beanutils-1.9.4-API文档-中文版.zip

    赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...

    BeanUtils_beanutils_

    BeanUtils 是 Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操作。它可以给JavaBean封装一个字符串数据,也可以将一个表单提交的所有数据封装到JavaBean中。使用第三方工具,需要导入jar包:

    commons-beanutils-1.9.4-API文档-中英对照版.zip

    赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...

    commons-beanutils-1.9.3

    BeanUtils工具由Apache软件基金组织编写,提供给我们使用,主要解决的问题是:把对象的属性数据封装到对象中。在整个J2EE的编程过程中,我们经常会从各种配置文件中读取相应的数据,需要明白的一点是从配置文件中...

    beanutils-1.9.3-bin

    BeanUtils是由Apache公司开发的针对操作JavaBean的工具包。...但是由Apache公司开发的BeanUtils会更常用,同时,BeanUtils还需要配合第三方日志工具来使用,这里我们同样使用Apache公司的common logging

    commons-beanutils-1.8.0.jar beanutils.jar beanutils.jar工具包

    commons-beanutils-1.8.0.jar beanutils.jar beanutils.jar工具包

    BeanUtils工具

    BeanUtils工具是一种方便我们对JavaBean进行操作的工具,是Apache组织下的产品。beanUtils 可以便于对javaBean的属性、对象进行赋值,beanUtils可以将一个MAP集合的数据拷贝到一个javabean对象中。

    BeanUtils教程

    BeanUtils教程BeanUtils教程BeanUtils教程BeanUtils教程BeanUtils教程BeanUtils教程

    BeanUtils_1.8.3帮助文档

    BeanUtils_1.8.3最新帮助文档,希望对给位有用。。。

    commons-beanutils-1.9.3-API文档-中文版.zip

    赠送jar包:commons-beanutils-1.9.3.jar; 赠送原API文档:commons-beanutils-1.9.3-javadoc.jar; 赠送源代码:commons-beanutils-1.9.3-sources.jar; 包含翻译后的API文档:commons-beanutils-1.9.3-javadoc-...

    commons-beanutils-1.8.0 jar包下载

    commons-beanutils-1.8.0 jar包: 1.commons-beanutils-1.8.0.jar 2.commons-beanutils-1.8.0-javadoc.jar 3.commons-beanutils-1.8.0-sources.jar 4.commons-beanutils-bean-collections-1.8.0.jar 5.commons-...

    BeanUtils工具 .jar 包

    BeanUtils工具 .jar 包使用很简单 可以参考博客java学习笔记——javaweb之BeanUtils、EL、JSTL

    BeanUtils所需的包

    BeanUtils的包BeanUtils的包BeanUtils的包BeanUtils的包BeanUtils的包BeanUtils的包BeanUtils的包BeanUtils的包BeanUtils的包

    beanutils 1.8 jar包+源码_阿锦—小白

    完美beanUtils 1.8 jar包与源码

    Commons-beanutils jar包

    Commons-beanutils jar包,比较新希望对大家能有帮助

    org.apache.commons.beanutils.BeanUtils实例

    此为BeanUtils的实例。其中apache的包有一个小的BUG已在其中说明。

Global site tag (gtag.js) - Google Analytics