Jakarta BeanUtils使用例子程序

//必须要加beanutils包和logging包

public class BeanUtilsDemo {
	public static void main(String[] args) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{
		Company c = new Company();
		c.setName("cdw");
		
		//A.BeanUtils可以直接get和set一个属性的值。
		
		//获取:simple(String)
		System.out.println(BeanUtils.getSimpleProperty(c, "name"));
		System.out.println(PropertyUtils.getProperty(c, "name"));
		HashMap<String, String> am = new HashMap<String, String>();
		am.put("1","234-222-1222211");
		am.put("2","021-086-1232323");
		BeanUtils.setProperty(c,"telephone",am);
	//	System.out.println(c.getTelephone().get("1"));
		
		//获取:index(List),以下两种方法相同
		System.out.println(BeanUtils.getIndexedProperty(c, "days", 1));
		System.out.println(BeanUtils.getProperty(c, "days[1]"));
		
		//获取:map(Map)以下两种方法相同
		System.out.println(BeanUtils.getMappedProperty(c, "telephone", "1"));
		System.out.println(BeanUtils.getProperty(c, "telephone(1)"));
		
		//B.copyProperty方法可以直接进行Bean之间的clone
		/**
		 * 注:但是这种copy都是浅拷贝,复制后的2个Bean的同一个属性可能拥有同一个对象的ref,这个在使用时要小心,特别是对于属性为自定义类的情况
		 */
		Company c2 = new Company();
        BeanUtils.copyProperties(c2, c);
        System.out.println(BeanUtils.getProperty(c2, "name"));
		
        
        //C.populate方法用于将一个map的值填充到一个bean中。
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("name", "Lucy");
        
        List<String> empList = new ArrayList<String>();
        empList.add("张三");
        empList.add("李四");
        empList.add("王五");
        List<String> empList2 = new ArrayList<String>();
        empList2.add("张三1");
        empList2.add("李四1");
        empList2.add("王五1");
        Map<String,List<String>> emps = new HashMap<String,List<String>>();
        emps.put("employes",empList);
        //不能继续加,会覆盖empList
        //  emps.put("employes", empList2);
        
        Company cc = new Company();
        BeanUtils.populate(cc, map);
        BeanUtils.populate(cc, emps);
System.out.println("_____________________________________________________");
        System.out.println(BeanUtils.getProperty(cc, "name"));
        System.out.println(BeanUtils.getProperty(cc, "employes[2]"));
        
        // D.LazyDynaBean,实现一个动态的Bean,可以直接往里面加入属性,作为一个JavaBean一样使用,
        // 也可以用上面的BeanUtils或get/set方法进行操作,而不用事先定义一个标准的JavaBean类
        LazyDynaMap dynaBean1 = new LazyDynaMap();
	    dynaBean1.set("foo", "bar");
	    dynaBean1.set("customer", "title", "Mr");
	    dynaBean1.set("address", 0, "address1");
	    System.out.println(dynaBean1.get("address", 0));
	    Map myMap = dynaBean1.getMap();
	    System.out.println(myMap.toString());
	  
	    //注:对于这个类还有两个重要的Field要注意:returnnull——指定在get方法使用了一个没有定义过的property时,DynaBean的行为//取的字段的信息
	    dynaBean1.setReturnNull(true);//设为ture。若Bean中没有此字段,返回null

	    //默认为false。若Bean中没有此字段,自动增加一个:)System.out.println(dynaBean1.get("aaa"));//此时返回null
	    // Restricted——指定是否允许改变这个bean的property。
	    //MutableDynaClass.setRestricted设为true后,字段不可再增删和修改.
	    //默认为false,允许增删和修改

		dynaBean1.setRestricted(true);
	//	dynaBean1.set("test","error");//这里会出错!
		
		/**
		 * ConstructorUtils
		 * 这个类中的方法主要分成两种,一种是得到构造方法,一种是创建对象。
		 */
		//根据一个java.lang.Class以及相应的构造方法的参数,创建一个对象。
		//Company com = new Company("hello");
		//可以写成下面的形式
		try {
			Object obj=ConstructorUtils.invokeConstructor(Company.class, "hello");
			Company com=(Company)obj;
			System.out.println("------------通过构造方法构造类,获取属性------------");
			System.out.println(BeanUtils.getProperty(com, "name"));
		} catch (InstantiationException e) {
			e.printStackTrace();
		}
		
		
		/**
		 * MethodUtils 调用对象的方法,
		 * 与ConstructorUtils类似,不过调用的时候,通常需要再指定一个method name的参数
		 */
		System.out.println(MethodUtils.invokeMethod(cc, "showDate", null));
	}
}



public class TestRowSetDynaClass {
	public static Connection con;
	public PreparedStatement pstm;
	private static String dbClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// 定义保存数据库驱动的变量
	private static String dbUrl = "jdbc:sqlserver://localhost:1433;DatabaseName=xjyglxt";
	private static String dbUser = "sa";
 
	private static String dbPwd = "ctgusec";   
	public static void main(String[] args) {
		PreparedStatement ps=null;   
		ResultSet rs=null;
		try {   
			Class.forName(dbClassName).newInstance();   
			con = DriverManager.getConnection(dbUrl,dbUser,dbPwd);   
			ps=con.prepareStatement("select * from glue");
			rs=ps.executeQuery();   
			//采用一般的遍历方法
//			while(rs.next()){   
//				System.out.println(rs.getString("id"));   
//				} 
//			rs.beforeFirst();//这里必须用beforeFirst,因为RowSetDynaClass只从当前位置向前滚动   
			//采用BeanUtils提供的遍历方法   
			RowSetDynaClass rsdc = new RowSetDynaClass(rs);   
			rs.close();   
			ps.close();   
			List rows = rsdc.getRows();//返回一个标准的List,存放的是DynaBean   
			for (int i = 0; i <rows.size(); i++) {   
				DynaBean b=(DynaBean)rows.get(i);   
				System.out.println(b.get("id")+","+b.get("type")+","+b.get("count")+","+b.get("price"));   
			}   


		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}

		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值