new framework(6)--extract data from ResultSet via reflect
今天試了一下用反射從ResultSet 提取數據,然后調用相應的dto的方法。
這樣就不要每次都針對一個新表來寫一次extractData方法了,挺爽的。
缺點就是數據表中的字段與dto的方法必須一一對應。
/**
* extract data from ResultSet to dto
*/
protected DtoInterface extractData(ResultSet rs) throws Exception
{
if(dtoClass == null)
throw new NullPointerException("dtoClass is not setted!");
DtoInterface dto = dtoClass.newInstance();
ResultSetMetaData rsm = rs.getMetaData();
for(int i=1;i<=rsm.getColumnCount();i++)
{
String methodName = "set" + rsm.getColumnName(i).replaceAll("_", "");
SysLogger.debug("[" + rsm.getColumnName(i) + "]=" + rsm.getColumnType(i) + ",method=" + methodName);
Method method = lookupMethod(dtoClass.getMethods(), methodName);
if(method==null)
{
SysLogger.error("set" + rsm.getColumnName(i) + " does not exist");
continue;
}
if(rsm.getColumnType(i)==Types.INTEGER)
method.invoke(dto,rs.getInt(i));
else if(rsm.getColumnType(i)==Types.VARCHAR)
method.invoke(dto,rs.getString(i));
}
return dto;
}
protected Method lookupMethod(Method[] methods,String methodName)
{
Method result = null;
for(Method method:methods)
{
if(method.getName().equalsIgnoreCase(methodName))
{
result = method;
break;
}
}
return result;
}
這樣就不要每次都針對一個新表來寫一次extractData方法了,挺爽的。
缺點就是數據表中的字段與dto的方法必須一一對應。








































