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;
		
	}

}

你可能感兴趣的:(java,sql,Hibernate,mysql,jdbc)