Java语言描述
public <T> T query(Class<T> clazz,String sql,Object...args) {
T entity =null;
PreparedStatement ps=null;
try {
conn=JDBCUtils.getConnection();
ps=conn.prepareStatement(sql);
for(int i=0;i<args.length;i++) {
ps.setObject(i+1, args[i]);
}
rs=ps.executeQuery();
//2.得到对象ResultSetMetaData
ResultSetMetaData rsmd=rs.getMetaData();
//3.创建一个Map<String,Object>列的名称key列的值作为value
Map<String,Object>values =new HashMap<>();
//4.处理结果集,利用ResultSetMetaData填充对应的Map对象
if(rs.next()) {
for(int i=0;i<rsmd.getColumnCount();i++) {
String columnLabel = rsmd.getColumnLabel(i+1);
Object columnValue =rs.getObject(i+1);
values.put(columnLabel, columnValue);
}
}
//5.若Map不为空集,利用反射创建clazz 对应的对象
if(values.size()>0) {
entity=clazz.newInstance();
//6.遍历Map对象。利用反射为class对象的对应的属性赋值
for(Map.Entry<String, Object> entry:values.entrySet()) {
String fieldName =entry.getKey();
Object value =null;
if(entry.getValue() instanceof Long) {
value =Integer.parseInt(entry.getValue().toString());
}else {
value =entry.getValue();
}
ReflectionUtils.setFieldValue(entity,fieldName,value);
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return entity;
}