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 发布
该博客主要展示了如何使用Java代码模拟Hibernate的插入操作。通过创建Session类,定义了ORM映射,动态生成SQL语句,并利用反射调用对象方法获取属性值,最后执行PreparedStatement进行数据保存。示例中涉及了对学生对象(Student)的id、name和age属性的处理。
1万+

被折叠的 条评论
为什么被折叠?



