while (resultSet.next()) { Customer customer = new Customer(); for (int i = 0; i < columnCount; i++) { String columnLabel = metaData.getColumnLabel(i + 1); //以依次获取列标签 Object object = resultSet.getObject(columnLabel); //反射 //filed 此时 调用出来了 i+1个列并且 将 这个成员变量 当成反射核心 Field field = Customer.class.getDeclaredField(columnLabel); // field.set(customer, object);//私有属性不能直接复制 //暴力反射 //强制反射核心public field.setAccessible(true); //以field 这个 成员变量为核心去 看 (目标对象,目标对象的本成员变量希望被替换成什么) field.set(customer, object); }
public class Customer { private int id; private String name; private String gender; private int age; private double salary; private String phone;
//省略构造方法。。。。。
}
在原先的概念中是以创建的对象为思考的核心,反射顾名思义就是用创建的对象里面的“东西”当作核心去改变、查看创建的对象。
这段代码中,columnLabel是代表resultSet这个收集的每个列名也就是Customer这个类的成员变量,然后把每次循环中的columnLabel当成核心去反射
Field field = Customer.class.getDeclaredField(columnLabel);
每个Customer的对象,比如
field.set(customer, object);就是利用Customer这个类的“columnLabel”成员变量也就是被赋值的field当成核心,去对Customer这个类的 customer这个对象的field这个成员进行更改值为
Object object = resultSet.getObject(columnLabel);
中的object。
#########################################
实质是用 oject去替换掉customer这个对象中的每次循环中的各个“columnLabel”成员变量。
纯新手,相当于笔记给自己看,谨受教