`

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对象转换为JavaBean的过程。 Apache Commons BeanUtils的核心功能是通过反射机制来操作JavaBean的属性。在Java编程中,JavaBean是一种遵循特定规范的类,...

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

    以下是一个简单的使用BeanUtils的例子: ```java import org.apache.commons.beanutils.BeanUtils; public void registerUser(User user, HttpServletRequest request) { try { // 将请求参数填充到User对象 ...

    commons-beanutils 源码

    总结来说,Apache Commons BeanUtils是Java开发中的重要工具,通过深入研究其源码,我们可以了解到JavaBean模式的实现细节,以及如何利用反射和类型转换来增强代码的灵活性。同时,源码中的设计模式和异常处理策略也...

    commons-beanutils-1.9.4

    在本文中,我们将深入探讨`commons-beanutils-1.9.4`这个版本,了解其核心功能、使用场景以及如何在项目中集成和应用。 Apache Commons BeanUtils库的主要目标是简化JavaBean对象的属性访问。它通过提供一系列静态...

    commons-beanutils-1.8.0

    总结来说,Apache Commons BeanUtils 1.8.0是处理JavaBean属性的强大工具,它的出现极大地简化了Java对象的属性操作,提高了代码的可读性和可维护性。配合`commons-logging.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.8.3 API

    总结来说,Apache Commons BeanUtils 1.8.3 API是一个强大且易用的工具,它简化了Java Bean的操作,使开发者能更专注于业务逻辑而不是基础的属性设置。无论是在大型企业级应用还是小型项目中,这个库都是一个不可或...

    beanutils的jar包

    本篇文章将深入探讨Apache Commons BeanUtils的核心功能、使用场景以及如何有效地利用这个库来提升代码的效率和可读性。 Apache Commons BeanUtils是Apache软件基金会开发的一个开源项目,它是Apache Commons项目的...

    beanutils-1.8.3开发包

    Apache BeanUtils库是Java开发中的...不过,由于BeanUtils使用反射,可能存在一定的性能损耗,因此在性能敏感的应用中需要谨慎使用。同时,由于其依赖于JavaBeans规范,对于非JavaBeans对象的操作可能需要额外的适配。

    beanutils包

    总结来说,Apache Commons BeanUtils是Java开发中的得力助手,尤其在网络框架的构建中,其强大的属性操作和类型转换功能大大提升了开发效率和代码质量。通过熟练掌握BeanUtils的使用,开发者可以更专注于业务逻辑,...

    commons-beanutils-1.8.2-src官方源文件,是你学习beanutils工具的必备资料

    总的来说,"commons-beanutils-1.8.2-src"官方源文件包是学习Java Bean操作的宝贵资源,通过研究源代码,开发者不仅可以掌握BeanUtils的使用,还能进一步提升对Java反射和类型转换的理解,从而提高开发效率和代码...

    BeanUtils包

    2. **安全问题:** BeanUtils使用反射机制,如果属性是私有的,需要谨慎使用,因为这可能会暴露对象的内部状态。 3. **性能考虑:** 尽管BeanUtils提供了很多便利,但频繁使用反射可能会带来性能损失,对于性能敏感...

    BeanUtils_beanutils_

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

    commons-beanutils-1.8.3和commons-beanutils-1.8.0

    - **安全性增强**:对于旧版本的安全漏洞,新版本可能会进行修复,确保在使用过程中的安全性。 在实际项目中,升级到`commons-beanutils-1.8.3`可能会带来更好的性能和稳定性,但也需要注意检查与现有代码的兼容性...

    org.apache.commons.beanutils.jar

    总结来说,Apache Commons BeanUtils是Java开发中的得力助手,它极大地提高了处理JavaBean对象的效率,减少了代码的冗余,同时也为处理复杂的数据操作提供了便利。通过使用这个库,开发者可以更专注于业务逻辑,而非...

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

    总结来说,Apache Commons BeanUtils 1.8.0是一个强大的Java Bean操作库,它简化了属性的读写操作,提供了对象复制、属性批量设置等高级功能,并且源码开放,有助于开发者提升技能。在Java开发中,尤其是在需要处理...

    beanutils 的jar包

    本文将深入探讨BeanUtils的核心功能及使用方法。 BeanUtils是Apache Commons项目的一部分,它的主要目标是提供一套便捷的工具方法,用于处理JavaBean对象。JavaBean是一种遵循特定设计规范的Java类,通常包含公共的...

Global site tag (gtag.js) - Google Analytics