hibernate 模拟实现
StuentTest.java
import com.hugui.hibernate.model.Student;public class StudentTest {public static void main(String []args) throws Exception{Student s = new Student();s.setId(3);s.setName("s3");s.setAge(23);Session session = new Session();session.save(s);}}Student.java
package com.hugui.hibernate.model;public class Student {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}Session.java
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.hugui.hibernate.model.Student;public class Session {String tableName = "_Student";Map<String, String> cfs = new HashMap<String, String>();String [] methodNames = null;public Session() {cfs.put("_id", "id");cfs.put("_name", "name");cfs.put("_age", "age");methodNames = new String[cfs.size()];}public void save(Student s) throws Exception {String sql = createSQL();Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/hibernate","root","root");PreparedStatement pstmt = conn.prepareStatement(sql);//设置for(int i=0; i<methodNames.length; i++){//利用反射拿到方法Method m = s.getClass().getMethod(methodNames[i]);Class r = m.getReturnType();if(r.getName().equals("java.lang.String")){String returnValue = (String)m.invoke(s);pstmt.setString(i+1, returnValue);}if(r.getName().equals("int")){int returnValue = (Integer)m.invoke(s);pstmt.setInt(i+1, returnValue);}System.out.println(m.getName() + "|" + r.getName());}pstmt.executeUpdate();pstmt.close();conn.close();}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,v.length());methodNames[index++] = "get" + v;str1 += s + ",";}str1 = str1.substring(0, str1.length()-1);System.out.println(str1);String str2 = "";for(int i=0; i<cfs.size(); i++){str2 += "?,";}str2 = str2.substring(0, str2.length()-1);System.out.println(str2);String sql = "insert into " + tableName + "("+str1+")" + "values(" + str2 + ")";System.out.println(sql);return sql;}}