1、
package cn.itcast.frame.utils;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
/*
* "select * from account where id=?"--> 一条记录
Java中: Account a
情况二: ResultSet只有一条记录,将这条记录封装到一个JavaBean中
处理器: BeanHandler implements ResultSetHandler
*/
public class BeanHandler implements ResultSetHandler {
private Class clazz;
/**
*
* @param clazz: 将结果集中的记录封装到该类的一个实例中
*/
public BeanHandler(Class clazz){
this.clazz = clazz;
}
@Override
public Object handler(ResultSet rs) {
if(rs == null){
return null;
}
//定义该类的一个实例
Object instance = null;
try {
//创建该类的实例
instance = clazz.newInstance();
//取出结果集中元数据(结果集的元数据)
ResultSetMetaData metaData = rs.getMetaData();
//结果集中的列数
int columnCount = metaData.getColumnCount();
if(rs.next()){
//取出该行上的每个列
for(int i=0;i<columnCount;i++){
//该列的名字
String columnName = metaData.getColumnName(i+1);
//取该列的值
Object value = rs.getObject(columnName);
//得到该类clazz的某个属性
Field f = clazz.getDeclaredField(columnName);
//暴力反射
f.setAccessible(true);
//将该值放到该属性上