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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值