相关代码
public
class
DTOPopulator
...
{

public static List populate(ResultSet rs,Class clazz) throws Exception...{
ResultSetMetaData metaData = rs.getMetaData(); //取得结果集的元元素
int colCount = metaData.getColumnCount(); //取得所有列的个数
List ret = new ArrayList(); //存放返回结果的容器
Field[] fields = clazz.getDeclaredFields(); //取得业务对象的属性

while(rs.next())...{
Object newInstance = clazz.newInstance(); //构造业务对象实例
//将结果集中每一条记录,每一个字段取出,根据命名规则,对对应的业务对象的属性进行赋值

for(int i=1;i<=colCount;i++)...{ //对于该记录的每一列

try...{
Object value = rs.getObject(i);

for(int j=0;j<fields.length;j++)...{
Field f = fields[j];

if(f.getName().equalsIgnoreCase(metaData.getColumnName(i).replaceAll("_","")))...{
BeanUtils.copyProperty(newInstance,f.getName(),value);
}
}

}catch (Exception e) ...{
// TODO: handle exception
e.printStackTrace();
}
}
ret.add(newInstance);
}
return ret;
}




































ResultSetMetaData rsmt=rs.getMetaData();是什么意思?答:得到结果集(rs)的结构信息,比如字段数、字段名等。
String类的replaceAll()方法,第一个参数是一个正则表达式,对于"[abc]abc"字符串,进行replaceAll("[abc]","1");替换之后的结果是:[111]111,正则表达式[abc]表示a,b,c的任何字符.
replaceAll
public String replaceAll(String regex, String replacement)
-
使用给定的 replacement 字符串替换此字符串匹配给定的
正则表达式的每个子字符串。
此方法调用的 str.replaceAll(regex, repl) 形式产生与以下表达式完全相同的结果:
Pattern
.compile
( regex ).matcher
( str ).replaceAll
( repl ) -
-
-
参数:
-
regex
- 用来匹配此字符串的正则表达式
返回:
- 得到的 String 抛出:
-
PatternSyntaxException
- 如果正则表达式的语法无效
-
Class
类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class
对象。基本的 Java 类型(boolean
、byte
、char
、short
、int
、long
、float
和 double
)和关键字 void
也表示为 Class
对象。
Class
没有公共构造方法。Class
对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass
方法自动构造的
getDeclaredFields
public Field[] getDeclaredFields() throws SecurityException
-
返回
Field
对象的一个数组,这些对象反映此Class
对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此Class
对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。 -
newInstance
()
创建此 Class 对象所表示的类的一个新实例。