主要思路:
用反射的方式来动态获取要创建的储存数据的类型
关于如何用反射读取某个特定的表已经在上一篇博客里面解释过了
点此进入上一篇
这里就不赘述了 就只说不同的地方
private static <T> ArrayList allmethod(Class<T>clazz,String sql )throws Exception{
set set = new set();//获取连接
Connection connection = set.getConnection();
PreparedStatement ps = connection.prepareStatement(sql);
ResultSet resultSet = ps.executeQuery();
ResultSetMetaData metaData = resultSet.getMetaData();
int length=metaData.getColumnCount();
ArrayList<Object> objects = new ArrayList<>();
while (resultSet.next()){
T set_user= clazz.getDeclaredConstructor().newInstance();
for (int i=0;i<length;i++){
String name=metaData.getColumnLabel(i+1);
Object value = resultSet.getObject(i + 1);
Field field = clazz.getDeclaredField(name);
field.setAccessible(true);
field.set(set_user,value);
}
objects.add(set_user);
}
for (Object object : objects) {
System.out.println(object.toString());
}
connection.close();
return objects;
}
其实不同的就这点
T set_user= clazz.getDeclaredConstructor().newInstance();
通过反射得到传入的要用的储存对象
然后通过反射改变对象的filed(成员变量)值
Object value = resultSet.getObject(i + 1);
Field field = clazz.getDeclaredField(name);
//通过名字来获得要取的成员变量
field.setAccessible(true);//设置私有变量可以被访问和改变
field.set(set_user,value);
//改变成员变量