模拟hibernate,实现了增删改查以及按id查询

模拟hibernate,实现了增删改查以及按id查询
public class PrePareSql {

	public static String selectSql(Class<?> obj) {
		String sql = "select ";
		Field[] fields = obj.getDeclaredFields();

		for (int i = 0; i < fields.length; i++) {
			if (i < fields.length - 1) {
				sql = sql + fields[i].getName() + " ,";
			} else {
				sql = sql + fields[i].getName() + " from  ";
			}
		}
		String tableName = getTableName(obj);
		sql = sql + tableName;
		System.out.println(sql);
		return sql;
	}
	
	public static String selectSql(Class<?> obj,String id) {
		String sql = "select ";
		Field[] fields = obj.getDeclaredFields();

		for (int i = 0; i < fields.length; i++) {
			if (i < fields.length - 1) {
				sql = sql + fields[i].getName() + " ,";
			} else {
				sql = sql + fields[i].getName() + " from  ";
			}
		}
		
		
		String tableName = getTableName(obj) + " where " + fields[0].getName() +" =  ?";
		sql = sql + tableName;
		System.out.println(sql);
		return sql;
	}

	public static String insertSql(Class<?> obj) {
		
		String sql = "insert into  " + getTableName(obj) +" ( ";
		Field[] fields = obj.getDeclaredFields();
		for (int i = 0; i < fields.length; i++) {
			if (i < fields.length - 1) {
				sql = sql + fields[i].getName() + " ,";
			} else {
				sql = sql + fields[i].getName() + " )  "+"values( ";
			}
		}
		for (int i = 0; i < fields.length; i++) {
			if (i < fields.length - 1) {
				sql=sql+"?,";
			}else{
				sql=sql+"? )";
			}
		}
		
		System.out.println(sql);
		return sql;
	}
	
	public static String deleteSql(Class<?> obj){
		String sql = "delete from " + getTableName(obj)+" where ";
		Field[] fields = obj.getDeclaredFields();
		
		for (int i = 0; i < fields.length; i++) {
			if (i < fields.length - 1) {
				sql = sql + fields[i].getName() + " = ? and ";
			} else {
				sql = sql + fields[i].getName()+" = ? ";
			}
		}
		
		
		
	   
		System.out.println(sql);
		return sql;
	}
	
	public static String updateSql(Class<?> obj){
		//UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 
		//UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
		String sql = "update " +getTableName(obj) +" set "; 
		Field[] fields = obj.getDeclaredFields();
		
		for (int i = 1; i < fields.length; i++) {
			if (i < fields.length - 1) {
				sql = sql + fields[i].getName() + " = ? , ";
			} else {
				sql = sql + fields[i].getName()+" = ?  where ";
			}
		}
		sql=sql+ fields[0].getName() +" = ?";
		System.out.println(sql);
		return sql;
	}

	public static String getTableName(Class<?> obj) {

		String className = obj.getName();
		int index = className.lastIndexOf(".");
		String realClassName = className.substring(index + 1);
		return realClassName;
	}
	

	
	public static void main(String[] args) {
		PrePareSql.selectSql(UserInfo.class,"liu");
		PrePareSql.insertSql(UserInfo.class);
		PrePareSql.deleteSql(UserInfo.class);
		PrePareSql.updateSql(UserInfo.class);
		
	}
}

//这个是工具类
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ConnectionUtil {

	private Connection conn;
	private String sql;
	private List params;

	public void setConn(Connection conn) {
		this.conn = conn;
	}

	public void setSql(String sql) {
		this.sql = sql;
	}

	public void setParams(List params) {
		this.params = params;
	}

	public Connection getConnection() {
		Connection conn = null;

		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost/test",
					"root", "root");
		} catch (SQLException e) {

			e.printStackTrace();
		} catch (ClassNotFoundException e) {

			e.printStackTrace();
		}
		return conn;
	}

	public List executeQuery(Class<?> entityClass) {
		ResultSet rs = null;

		List list = new ArrayList();
		try {
			setSql(PrePareSql.selectSql(entityClass));
			PreparedStatement pstmt = getConnection().prepareStatement(sql);
//			setParams(pstmt);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				// System.out.println(rs.getString(1) + "\t" + rs.getString(2));
				Object newInstance = wrap(entityClass, rs);
				list.add(newInstance);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}

	// getOne
	public Object executeQuery(Class<?> entityClass, String id) {
		// Class<?> entityClass = entity.getClass();
		ResultSet rs = null;
		Object newInstance = null;
		setSql(PrePareSql.selectSql(entityClass, id));
		try {
			PreparedStatement pstmt = getConnection().prepareStatement(sql);
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				// System.out.println(rs.getString(1) + "\t" + rs.getString(2));
				newInstance = wrap(entityClass, rs);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return newInstance;
	}

	public void save(Object entity) {

		Class<?> entityClass = entity.getClass();
		Field[] fileds = entityClass.getDeclaredFields();
		ArrayList arrayList = new ArrayList();
		try {
			for (Field f : fileds) {
				String getMethodName = "get"
						+ f.getName().substring(0, 1).toUpperCase()
						+ f.getName().substring(1);
				Method getMethod = entityClass.getMethod(getMethodName,
						new Class[] {});
				// System.out.println(setMethod);
				Object obj = getMethod.invoke(entity, new Object[] {});
				arrayList.add(obj);

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		try {

			setSql(PrePareSql.insertSql(entityClass));
			PreparedStatement pstmt = getConnection().prepareStatement(sql);
			setParams(arrayList);
			setParams(pstmt);
			pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	public void update(Object entity) {

		Class<?> entityClass = entity.getClass();
		Field[] fileds = entityClass.getDeclaredFields();
		ArrayList arrayList = new ArrayList();
		try {
			for (int i = 1; i < fileds.length; i++) {
				String getMethodName = "get"
						+ fileds[i].getName().substring(0, 1).toUpperCase()
						+ fileds[i].getName().substring(1);
				Method getMethod = entityClass.getMethod(getMethodName,
						new Class[] {});
				System.out.println(getMethod);
				Object obj = getMethod.invoke(entity, new Object[] {});
				arrayList.add(obj);
			}
			String getMethodName = "get"
					+ fileds[0].getName().substring(0, 1).toUpperCase()
					+ fileds[0].getName().substring(1);
			Method getMethod = entityClass.getMethod(getMethodName,
					new Class[] {});
			System.out.println(getMethod);
			Object obj = getMethod.invoke(entity, new Object[] {});
			arrayList.add(obj);
		} catch (Exception e) {
			e.printStackTrace();
		}

		for (int i = 0; i < arrayList.size(); i++) {
			System.out.println("array:   " + arrayList.get(i));
		}

		try {

			setSql(PrePareSql.updateSql(entityClass));
			PreparedStatement pstmt = getConnection().prepareStatement(sql);
			setParams(arrayList);
			setParams(pstmt);
			pstmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	public Object wrap(Class<?> entityClass, ResultSet rs) {
		Object obj2 = null;
		try {
			obj2 = entityClass.newInstance();
		} catch (InstantiationException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IllegalAccessException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		Field[] fileds = entityClass.getDeclaredFields();

		try {

			for (Field f : fileds) {
				String setMethodName = "set"
						+ f.getName().substring(0, 1).toUpperCase()
						+ f.getName().substring(1);
				Method setMethod = entityClass.getMethod(setMethodName,
						new Class[] { f.getType() });
				Object obj = rs.getObject(f.getName());
				setMethod.invoke(obj2, new Object[] { obj });

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return obj2;

	}


	private void setParams(PreparedStatement pstmt) {
		if (this.params == null || this.params.size() == 0) {
			return;
		}
		try {
			for (int i = 0; i < this.params.size(); i++) {
				pstmt.setObject(i + 1, this.params.get(i));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void delete(Object entity) {
		ArrayList arrayList = new ArrayList();
		Class<?> entityClass = entity.getClass();
		Field[] fileds = entityClass.getDeclaredFields();
		try {
			for (Field f : fileds) {
				String getMethodName = "get"
						+ f.getName().substring(0, 1).toUpperCase()
						+ f.getName().substring(1);
				Method getMethod = entityClass.getMethod(getMethodName,
						new Class[] {});
				// System.out.println(setMethod);
				Object obj = getMethod.invoke(entity, new Object[] {});
				arrayList.add(obj);

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		try {

			setSql(PrePareSql.deleteSql((entityClass)));
			PreparedStatement pstmt = getConnection().prepareStatement(sql);
			setParams(arrayList);
			setParams(pstmt);
			pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

你可能感兴趣的:(Hibernate)