怎么从ResultSet的结果自动构建JavaBean

我有元数据表,
比如该表为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个回答

基本上就两种方式:
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]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!