我有元数据表,
比如该表为A,现在该表有十条记录,比如是下面的样子。
id cn_name en_name data_type
1 搜索代码 search_code xxxx
2 名称 cname yyy
3 审核状态 audit_status ccc
4
5
.....
这就是该表类似的记录。改变的数据是会增加的。现在我想将该表的记录封装成一个javabean,至于原因,是因为该表的记录是元数据,他会是另外表的表结构的字段,这样我方便处理数据。
这个javabean类似这样
[code="java"]
public class 表名{
private String(全部都是String类型的,业务上这样)searchCode(就是表的记录的en_name);
private String cname;
private String auditStatus;
......
......
......
}
[/code]
javabean就是类似上面的样子,我现在的情况的这样,使用jdbc得出ResultSet,然后根据java反射机制一个字段一个字段的构造属性,getter和setter方法。有没有更加简洁和优雅的方法呢?
PS:由于项目的关系,没有使用hibernate,so别问我为什么不用这不用那的.谢谢
基本上就两种方式:
1、自己new 一个Bean,循环后自己逐个对应set进去
2、使用反射机制
对查询出来的字段动态添加前缀set,并将首字段改为大写,这样就可以调用到指定Bean指定字段的set方法
印象中没有更方便的方法了
[code="java"]
/**
* 从ResultSet绑定到JavaBean
*
* @param ResultSet
* @param DTO(JavaBean)
* @return DTO
*/
public static DTO bindDataToDTO(ResultSet rs, DTO dto) throws Exception {
//取得Method方法
Method[] methods = dto.getClass().getMethods();
//取得ResultSet的列名
ResultSetMetaData rsmd = rs.getMetaData();
int columnsCount = rsmd.getColumnCount();
String[] columnNames = new String[columnsCount];
for (int i = 0; i < columnsCount; i++) {
columnNames[i] = rsmd.getColumnLabel(i + 1);
}
//遍历ResultSet
while (rs.next()) {
//反射, 从ResultSet绑定到JavaBean
for (int i = 0; i < columnNames.length; i++) {
//取得Set方法
String setMethodName = "set" + columnNames[i];
//遍历Method
for (int j = 0; j < methods.length; j++) {
if (methods[j].getName().equalsIgnoreCase(setMethodName)) {
setMethodName = methods[j].getName();
Object value = rs.getObject(columnNames[i]);
//实行Set方法
try {
//JavaBean内部属性和ResultSet中一致时候
Method setMethod = dto.getClass().getMethod(
setMethodName, value.getClass());
setMethod.invoke(dto, value);
} catch (Exception e) {
//JavaBean内部属性和ResultSet中不一致时候,使用String来输入值。
Method setMethod = dto.getClass().getMethod(
setMethodName, String.class);
setMethod.invoke(dto, value.toString());
}
}
}
}
}
return dto;
}
[/code]