//必须要加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();
}
}
}