動態映射bean 的內部賦值

/**
     * 從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;
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章