反射一直是java程序开发中的重难点,特别是在一些底层框架中都会大量运用到反射,今天我就分享一下反射在JDBC中的作用.
JDBC全称是Java DataBase Connectivity(java连接数据库技术),对于数据库中表格的数据一般存在多个属性,每个属性都有其对应的值(空或非空),这就让我们联想到了键值对结构,也就是Map集合,一个Map集合中可以存放一条数据的所有属性.而在JDBC中,基于反射能将Map集合转化为该数据的对象并返回.于是,我做了一个通用的转化工具类(map to bean),能将Map集合转化为任意一个java对象(JavaBean),以下是工具代码:
/**
* 将Map集合转化为一个确定的类型
*
* @param <T>
* @param map
* @param t
* @return
*/
public static <T> T mapToBean(Map<String, Object> map, Class<T> t) {
T obj = null;
try {
// 根据提供的Class对象创建对应类型的Object
obj = t.newInstance();
// 获取Class中所有Field
Field[] fields = t.getDeclaredFields();
// 遍历获取每一个属性对象
for (Field f : fields) {
// 获取属性名
String fname = f.getName();
// 获取属性
Object value = map.get(fname);
if (Objects.nonNull(value)) {
// 设置属性对象的可访问性
f.setAccessible(true);
// 将从map中获取的值设置给属性
f.set(obj, value);
}
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return obj;
}
总结:在java程序开发中,万物皆可对象化.