java相关。请问Class的clazz在各个语句里是什么用?我总不理解这一点,麻烦详解一下。谢谢
publicclassDataUtil{//将rs中的值封装成一个集合publicstaticCollectiongetDatas(Collectionresult,Re...
public class DataUtil {
//将rs中的值封装成一个集合
public static Collection getDatas(Collection result, ResultSet rs, Class clazz) {
try {
while (rs.next()) {
//创建类的实例
Object vo = clazz.newInstance();
//获取本对象的属性
Field[] fields = clazz.getDeclaredFields();
//获取父类的属性
Field[] superFields = clazz.getSuperclass().getDeclaredFields();
//父类的属性和自己的属性相加
Field[] allFields = addFields(superFields, fields);
//遍历所有的属性
for (Field field : allFields) {
//获得setter方法的方法名
String setterMethodName = getSetterMethodName(field.getName());
//获得setter方法
Method setterMethod = clazz.getMethod(setterMethodName, field.getType());
invokeMethod(rs, field, vo, setterMethod);
}
result.add(vo);
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
throw new DataException(e.getMessage());
}
return result;
}
//执行一个方法, 从ResultSet中获取一个字段的数据, 调用vo的setter方法
private static void invokeMethod(ResultSet rs, Field field, Object vo,
Method setterMethod) {
try {
//当使用ResultSet获取某个字段的时候, 如果没有该字段, 会出现SQLException, 在这里忽略该异常
String value = rs.getString(field.getName());
//从ResultSet中获取与该对象属性名一致的字段, 并执行setter方法
setterMethod.invoke(vo, value);
} catch (Exception e) {
//忽略异常
}
}
//根据属性名获得setter方法的方法名
private static String getSetterMethodName(String fieldName) {
String begin = fieldName.substring(0, 1).toUpperCase();
String end = fieldName.substring(1, fieldName.length());
String methodName = "set" + begin + end;
return methodName;
}
//相加两个数组
private static Field[] addFields(Field[] f1, Field[] f2) {
List<Field> l = new ArrayList<Field>();
for (Field f : f1) l.add(f);
for (Field f : f2) l.add(f);
return l.toArray(new Field[f1.length + f2.length]);
}
public static void main(String[] args) {
JDBCExecutor executor = JDBCExecutor.getJDBCExecutor();
ResultSet rs = executor.executeQuery("select * from t_book_type");
Collection<Type> result = DataUtil.getDatas(new ArrayList<Type>(), rs,
Type.class);
for (Type type : result) {
System.out.println(type.getTYPE_NAME());
}
}
} 展开
//将rs中的值封装成一个集合
public static Collection getDatas(Collection result, ResultSet rs, Class clazz) {
try {
while (rs.next()) {
//创建类的实例
Object vo = clazz.newInstance();
//获取本对象的属性
Field[] fields = clazz.getDeclaredFields();
//获取父类的属性
Field[] superFields = clazz.getSuperclass().getDeclaredFields();
//父类的属性和自己的属性相加
Field[] allFields = addFields(superFields, fields);
//遍历所有的属性
for (Field field : allFields) {
//获得setter方法的方法名
String setterMethodName = getSetterMethodName(field.getName());
//获得setter方法
Method setterMethod = clazz.getMethod(setterMethodName, field.getType());
invokeMethod(rs, field, vo, setterMethod);
}
result.add(vo);
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
throw new DataException(e.getMessage());
}
return result;
}
//执行一个方法, 从ResultSet中获取一个字段的数据, 调用vo的setter方法
private static void invokeMethod(ResultSet rs, Field field, Object vo,
Method setterMethod) {
try {
//当使用ResultSet获取某个字段的时候, 如果没有该字段, 会出现SQLException, 在这里忽略该异常
String value = rs.getString(field.getName());
//从ResultSet中获取与该对象属性名一致的字段, 并执行setter方法
setterMethod.invoke(vo, value);
} catch (Exception e) {
//忽略异常
}
}
//根据属性名获得setter方法的方法名
private static String getSetterMethodName(String fieldName) {
String begin = fieldName.substring(0, 1).toUpperCase();
String end = fieldName.substring(1, fieldName.length());
String methodName = "set" + begin + end;
return methodName;
}
//相加两个数组
private static Field[] addFields(Field[] f1, Field[] f2) {
List<Field> l = new ArrayList<Field>();
for (Field f : f1) l.add(f);
for (Field f : f2) l.add(f);
return l.toArray(new Field[f1.length + f2.length]);
}
public static void main(String[] args) {
JDBCExecutor executor = JDBCExecutor.getJDBCExecutor();
ResultSet rs = executor.executeQuery("select * from t_book_type");
Collection<Type> result = DataUtil.getDatas(new ArrayList<Type>(), rs,
Type.class);
for (Type type : result) {
System.out.println(type.getTYPE_NAME());
}
}
} 展开
1个回答
展开全部
从你的代码中来解释
public static Collection getDatas(Collection result, ResultSet rs, Class clazz) {// 这里的clazz代表的是一个类型参数,表示某种类型
try {
while (rs.next()) {
Object vo = clazz.newInstance(); // 表示根据这种类型来创建一个这种类型的实例
Field[] fields = clazz.getDeclaredFields(); // 这种类型中有哪些被声明的属性
Field[] superFields = clazz.getSuperclass().getDeclaredFields(); // 这种类型的父类型中有哪些声明的属性
Field[] allFields = addFields(superFields, fields);
for (Field field : allFields) {
String setterMethodName = getSetterMethodName(field.getName());
Method setterMethod = clazz.getMethod(setterMethodName, field.getType()); // 这种类型中取出指定的声明方法
invokeMethod(rs, field, vo, setterMethod);
}
public static Collection getDatas(Collection result, ResultSet rs, Class clazz) {// 这里的clazz代表的是一个类型参数,表示某种类型
try {
while (rs.next()) {
Object vo = clazz.newInstance(); // 表示根据这种类型来创建一个这种类型的实例
Field[] fields = clazz.getDeclaredFields(); // 这种类型中有哪些被声明的属性
Field[] superFields = clazz.getSuperclass().getDeclaredFields(); // 这种类型的父类型中有哪些声明的属性
Field[] allFields = addFields(superFields, fields);
for (Field field : allFields) {
String setterMethodName = getSetterMethodName(field.getName());
Method setterMethod = clazz.getMethod(setterMethodName, field.getType()); // 这种类型中取出指定的声明方法
invokeMethod(rs, field, vo, setterMethod);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询