package cn.test.main;
import java.lang.reflect.Method;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
public class Session {
private String table;
private String[] methods;
private Map<String, String> orm;
public Session() {
table = "Student";
// key is column, value is property
orm = new HashMap<String, String>();
orm.put("id", "id");
orm.put("name", "name");
orm.put("age", "age");
methods = new String[orm.size()];
}
public String createSQL() {
StringBuilder s1 = new StringBuilder();
int index = 0;
for (String column : orm.keySet()) {
String property = orm.get(column);
property = Character.toUpperCase(property.charAt(0))
+ property.substring(1);
// getId getName getAge
methods[index++] = "get" + property;
s1.append(column);
s1.append(",");
}
s1.subSequence(0, s1.length() - 1);
StringBuilder s2 = new StringBuilder();
for (int i = 0; i < orm.size(); ++i) {
s2.append("?,");
}
s2.append(s2.subSequence(0, s2.length() - 1));
// insert into Student(id,name,age) values (?,?,?)
String sql = "insert into " + table + "(" + s1 + ")" + " values (" + s2
+ ")";
return sql;
}
public void save(Student student) {
String sql = createSQL();
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost/hibernate", "root", "root");
PreparedStatement statement = conn.prepareStatement(sql);
for (int i = 0; i < methods.length; ++i) {
Method method = student.getClass().getMethod(methods[i]);
Class returnType = method.getReturnType();
if (returnType.getName().equals("java.lang.String")) {
String returnValue = (String) method.invoke(student);
statement.setString(i + 1, returnValue);
}
if (returnType.getName().equals("int")) {
Integer returnValue = (Integer) method.invoke(student);
statement.setInt(i + 1, returnValue);
}
}
}
}
hibernate模拟实现insert
最新推荐文章于 2021-01-19 12:16:25 发布