方法回调

作者在 2010-09-09 10:25:48 发布以下内容

package abc;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test {
 public static void main(String[] args) {
  Users users = new Users();
  users.setId("a");
  users.setName("b");
  users.setPass("c");
  Emplyee emplyee = new Emplyee();
  emplyee.setDepNo("1");
  emplyee.setEmpName("zhangsan");
  emplyee.setEmpNo("1001");
  new Test().save(emplyee);
 }

 /**
  * 运行根据对象动态生成SQL语句
  *
  * @param Object
  *            object=emplyee;//多态 父类 对象名=子类对象;
  */
 public void save(Object object) {
  // 获取运行时你传递的对象的类型 封装成java.lang.Class类型 注意与class进行区别
  // class1 包含了类的所有信息 如属性 方法 类名 属性的类型 属性的修饰符
  Class class1 = object.getClass();
  // 获取你传递的对象的简单类名
  String className = class1.getSimpleName();
  // 获取你传递的对象的所有属性的数组
  Field[] fields = class1.getDeclaredFields();

  StringBuffer stringBuffer = new StringBuffer("insert into " + className + "(");
  // 遍历数组 每一个元素Field表示一个属性相关。属性的类型 属性的修饰符等
  for (int i = 0; i < fields.length; i++) {
   if (i == fields.length - 1) {
    // fields[i].getName() 获取属性的名称 如果获取属性的类型用什么?? 查阅API
    stringBuffer.append(fields[i].getName() + ") values (");
   }
   else {
    stringBuffer.append(fields[i].getName() + ",");
   }

  }
  // 遍历数组 每一个元素Field表示一个属性相关、根据属性拼写属性对应的getter方法,get+"属性首字母大写"+"属性后面的字符"
  for (int i = 0; i < fields.length; i++) {
   String fieldName = fields[i].getName();
   // 属性对应的getter方法
   String methodName = "get" + (fieldName.charAt(0) + "").toUpperCase() + fieldName.substring(1);
   try {
    // 运行时获取methodName方法,通过反射方式调用
    // methodName 表示你要调用的方法的名称, null表示该方法定义的时候参数为空,
    // 如果不为空,method.invoke的时候要传递相同类型的数据
    Method method = class1.getMethod(methodName, null);
    // method.invoke相当于对象名.方法名 object 表示该方法是哪个对象的 null表示调用的时候不需要参数
    String value = method.invoke(object, null).toString();
    if (i == fields.length - 1) {
     stringBuffer.append("'" + value + "')");
    }
    else {
     stringBuffer.append("'" + value + "',");
    }

   }
   catch (Exception e) {
    e.printStackTrace();
   }
  }
  System.out.println(stringBuffer);

 }
}

默认分类 | 阅读 528 次
文章评论,共0条
游客请输入验证码
浏览9533次
文章分类
最新评论