Hibernate的简介和Hinbernate的简单模拟实现(二)
for(int i = 0; i < methodNames.length; i++) {
//利用Java的反射机制,获取对象的方法
Method m = stu.getClass().getMethod(methodNames[i]);
Class r = m.getReturnType(); //获取方法返回值类型
if(r.getName() == "java.lang.String"){ //如果返回值类型等于”java.lang.String"的话
String v = (String)m.invoke(stu); //对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
ps.setString(i + 1, v); //将指定参数设置为给定 Java String 值。
}
if(r.getName() == "int"){
Integer v = (Integer)m.invoke(stu);
ps.setInt(i + 1, v);
}
System.out.println(m.getName() + "|" + r.getName());
}
ps.executeUpdate(); //执行sql语句更新数据库
ps.close(); //释放此PrepareStatement对象的数据库和JDBC资源
conn.close(); //关闭数据连接
}
/**
* 创建SQL语句
* @return
*/
private String createSql() {
//拼接字段
String str1 = "";
int index = 0;
for(String s : cfs.keySet()) {
String v = cfs.get(s);
v = Character.toUpperCase(v.charAt(0)) + v.substring(1);
methodNames[index] = "get" + v;
index++;
str1 += s + ",";
}
str1 = str1.substring(0, str1.length() - 1); //去掉最后面的逗号","
System.out.println(str1);
//拼接( , , , ),问号的个数取决于map的长度
String str2 = "";
for(int i = 0; i < cfs.size(); i++){
str2 += " ,";
}
str2 = str2.substring(0, str2.length() - 1);
System.out.println(str2);
//拼接sql字符串
String sql = "Insert into " + tableName + "(" + str1 + ")" + "values" + "(" + str2 + ")";
System.out.println(sql);
return sql;
}
}
测试结果:
id,age,name
, ,
Insert into student(id,age,name)values( , , )
getId|int
getAge|int
getName|java.lang.String