测试类:
import com.fanda.hibernate.domain.Student;
import com.fanda.util.Session;
public class MainTest {
public static void main(String[] args) throws Exception {
Student student = new Student(100, "yue", 1);
//new一个自己的session
Session session = new Session();
//持久化对象
session.save(student);
}
}
模拟实现类:
/**
*
*/
package com.fanda.util;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.Map;
import com.fanda.hibernate.domain.Student;
public class Session {
Map<String, String> cfm = new HashMap<String, String>();//用于存放数据库列和实体feild的对应
String[] methods;//存放实体feild的get方法名
public Session() {
//初始化
cfm.put("_id", "id");
cfm.put("_name", "name");
cfm.put("_age", "age");
methods = new String[cfm.size()];
}
public void save(Student student) throws Exception{
Class.forName("com.mysql.jdbc.Driver");//加载驱动
Connection ct = DriverManager.getConnection("jdbc:mysql://localhost/hibernate", "root", "root");//得到连接
String sql = createSql();
PreparedStatement ps = ct.prepareStatement(sql);
for(int i=0;i<methods.length;i++) {
Method method = student.getClass().getMethod(methods[i]);//java反射获取对应的方法
//获取方法的返回值并判断根据不同返回值执行不同set
if("java.lang.String".equals(method.getReturnType().getName())) {
String value = (String) method.invoke(student);
ps.setString(i+1, value);
}
if("int".equals(method.getReturnType().getName())) {
Integer value = (Integer) method.invoke(student);
ps.setInt(i+1, value);
}
}
ps.executeUpdate();
}
private String createSql() {
//拼接sql语句
/**
* insert into _student(_id,_name,_age) values(?,?,?)
*/
String sql = "insert into _student"+"("+getKeyStr()+")"+" values "+"("+getValueStr()+")";
System.out.println(sql);
return sql;
}
private String getKeyStr() {
//拼接(_id,_name,_age)
String keyStr = "";
int index = 0;
for(String s : cfm.keySet()) {
keyStr = keyStr + s + ",";
//根据key值获取value,也就是根据数据库字段获取实体的域,然后拼接成类似getXXX的geter方法,保存到一个字符串数组里
String methodName = "";
methodName = "get"+Character.toUpperCase(cfm.get(s).charAt(0))+cfm.get(s).substring(1);
methods[index] = methodName;
index ++;
}
keyStr = keyStr.substring(0,keyStr.length()-1);
return keyStr;
}
private String getValueStr() {
//拼接(?,?,?)
String valueStr = "";
for(int i=0;i<cfm.size();i++) {
valueStr = valueStr + "? ,";
}
valueStr = valueStr.substring(0,valueStr.length()-1);
return valueStr;
}
}