模拟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();
}
}
}