Java成神之路
第一次手动封装JDBC
第一次尝试封装,只封装了select方法和insert方法!
package com.java.lixd.reflect;
import com.java.lixd.reflect.DBUtil;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class DataBaseUtil {
/**
*
* @param sql 传入的sql语句
* @param params 查询参数
* @param clazz entity Class
* @return
*/
public static List selectDatas(String sql, Object[] params, Class clazz) {
ResultSet rs = null;
List list = new ArrayList();
try (Connection connection = DBUtil.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql);
) {
if (params != null) {
rs = preparedStatement.executeQuery();
}
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
while (rs.next()) {
final Object obj = clazz.newInstance();
for (int i = 0; i < columnCount; i++) {
Object objectVale = rs.getObject(i + 1);
final String columnName = metaData.getColumnName(i + 1).toLowerCase();
final Field field = clazz.getDeclaredField(columnName);
final Method method = clazz.getMethod(getSetName(columnName), field.getType());
if (objectVale instanceof Number) {
Number number = (Number) objectVale;
final String fname = field.getType().getName();
if ("int".equals(fname) || "java.lang.Integer".equals(fname)) {
method.invoke(obj, number.intValue());
} else if ("shor".equals(fname) || "java.lang.Short".equals(fname)) {
method.invoke(obj, number.shortValue());
} else if ("long".equals(fname) || "java.lang.Long".equals(fname)) {
method.invoke(obj, number.longValue());
} else if ("byte".equals(fname) || "java.lang.Byte".equals(fname)) {
method.invoke(obj, number.byteValue());
} else if ("float".equals(fname) || "java.lang.Float".equals(fname)) {
method.invoke(obj, number.floatValue());
} else if ("double".equals(fname) || "java.lang.Double".equals(fname)) {
method.invoke(obj, number.doubleValue());
}
} else {
method.invoke(obj, objectVale);
}
}
list.add(obj);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return list;
}
/**
* 获取成员变量的set方法
* @param name 需要获取set方法的成员变量名
* @return 对应的set方法
*/
public static String getSetName(String name) {
return "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
}
/**
* 获取成员变量的get方法
* @param name 需要获取get方法的成员变量名
* @return 对应的get方法
*/
public static String getGetName(String name) {
return "get" + name.substring(0, 1).toUpperCase() + name.substring(1);
}
/**
* insert into Object
* @param objs 需要插入的数据值
* @param clazz entity Class
* @return 受影响行数
* @throws Exception
*/
public static int[] insertDatas(Object[] objs, Class clazz) {
Connection connection = null;
connection = DBUtil.getConnection();
String sql = "";
PreparedStatement preparedStatement = null;
Field[] declaredFields = clazz.getDeclaredFields();
StringBuilder sb = new StringBuilder("values(");
StringBuilder inserStr = new StringBuilder("insert into " + clazz.getSimpleName().toLowerCase() + " (");
for (int i = 0; i < declaredFields.length; i++) {
if (i == declaredFields.length - 1) {
sb.append("?)");
inserStr.append(declaredFields[i].getName() + ")");
} else {
sb.append("? ,");
inserStr.append(declaredFields[i].getName() + ",");
}
}
sql = inserStr + " " + sb.toString();
try {
preparedStatement=connection.prepareStatement(sql);
for (int i = 0; i < objs.length; i++) {
for (int j = 0; j < declaredFields.length; j++) {
Method method = clazz.getDeclaredMethod(getGetName(declaredFields[j].getName()));
Class type = declaredFields[j].getType();
Object fieldValue =method.invoke(objs[i]);
System.out.println("fieldValue:"+fieldValue);
preparedStatement.setObject(j+1,fieldValue);
}
preparedStatement.addBatch();
}
System.out.println(sql);
int[] ints = preparedStatement.executeBatch();
return ints;
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtil.closeConnection(connection,preparedStatement);
}
return null;
}
}