public class JdbcResultSetFactory {
public static <T> List<T> getObject(Class<T> classname, ResultSet resultSet) {
//resultSet为空,直接丢一个空类型
if (resultSet == null || classname == null) {
return null;
}
Object o = null;
ArrayList list = new ArrayList();
try {
while (resultSet.next()) {
Constructor[] declaredConstructors = classname.getDeclaredConstructors();
Constructor constructor = declaredConstructors[0];
//创建每一个实例对象
//如果是构造方法时,直接创建对象
if (constructor.getParameterCount() == 0) {
constructor.setAccessible(true);
o = constructor.newInstance();
} else {
Object[] objects = new Object[constructor.getParameterCount()];
Class[] parameterTypes = constructor.getParameterTypes();
for (int i = 0; i < objects.length; i++) {
//获得每一个属性的名字
String typeName = parameterTypes[i].getTypeName();
if ("String".equals(typeName)) {
objects[i] = "";
}
if ("int".equals(typeName)) {
objects[i] = 0;
}
//......
}
o = constructor.newInstance(objects);
}
//获得所有属性
Field[] fields = classname.getDeclaredFields();
int len = fields.length;
for (int i = 0; i < len; i++) {
fields[i].setAccessible(true);
//获得每个属性的名字
String tempName = fields[i].getName();
//通过tempName获得rs当前列的值
Object value = resultSet.getObject(tempName);
//设置这个对象的这个属性的值
fields[i].set(o, value);
}
//每个对象,加入到集合中
list.add(o);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return list;
}
JDBC查询所得的ResultSet结果集映射给实体类集合list
最新推荐文章于 2023-06-27 00:04:58 发布