将rs值动态映射到对应的entity上:
/**
* 将rs结果转换成对象列表
* @param rs jdbc结果集
* @param clazz 对象的映射类
* return 封装了对象的结果列表
*/
public List rsToEntity(ResultSet rs , Class clazz)
throws SQLException, InstantiationException, IllegalAccessException{
//结果集的元素对象
ResultSetMetaData rsmd = rs.getMetaData();
//获取结果集的字段的个数
int columnCount= rsmd.getColumnCount();
//返回结果的列表集合
List list = new ArrayList();
//Entity字段列表
Field[] fields = clazz.getDeclaredFields();
while(rs.next()){//对每一条记录进行操作
//构造Entity实体,每一个rs对应一个entity对象存储数据
Object obj = clazz.newInstance();
//将每一个字段取出进行赋值
for(int i = 1;i<=columnCount;i++){
//结果集的某一元素的值
Object value = rs.getObject(i);
//寻找该元素对应的字段属性
for(int j=0;j<fields.length;j++){
Field f = fields[j];
//根据字段名称遍历,如果匹配进行赋值
if(f.getName().equalsIgnoreCase(rsmd.getColumnName(i))){
boolean flag = f.isAccessible();
f.setAccessible(true);
//字段的obj即该字段的值
f.set(obj, value);
f.setAccessible(flag);
}
}
}
list.add(obj);
}
return list;
}