docs: public Object mapRow(ResultSet rs, int rowNumber) throws SQLException {
          // spring's : Object mappedObject = BeanUtils.instantiateClass(this.mappedClass);
          // jade's : private Object instantiateClass(this.mappedClass);
          // why: 经过简单的笔记本测试，mappedClass.newInstrance性能比BeanUtils.instantiateClass(mappedClass)快1个数量级
          Object mappedObject = instantiateClass(this.mappedClass);
          BeanWrapper bw = new BeanWrapperImpl(mappedObject);
  
          ResultSetMetaData rsmd = rs.getMetaData();
          int columnCount = rsmd.getColumnCount();
  
          boolean warnEnabled = logger.isWarnEnabled();
          boolean debugEnabled = logger.isDebugEnabled();
          Set<String> populatedProperties = (checkProperties ? new HashSet<String>() : null);
  
          for (int index = 1; index <= columnCount; index++) {
              String column = JdbcUtils.lookupColumnName(rsmd, index).toLowerCase();
              PropertyDescriptor pd = this.mappedFields.get(column);
              if (pd != null) {
                  try {
                      Object value = JdbcUtils.getResultSetValue(rs, index, pd.getPropertyType());
                      if (debugEnabled && rowNumber == 0) {
                          logger.debug("Mapping column '" + column + "' to property '" + pd.getName()
                                  + "' of type " + pd.getPropertyType());
                      }
                      bw.setPropertyValue(pd.getName(), value);
                      if (populatedProperties != null) {
                          populatedProperties.add(pd.getName());
                      }
                  } catch (NotWritablePropertyException ex) {
                      throw new DataRetrievalFailureException("Unable to map column " + column
                              + " to property " + pd.getName(), ex);
                  }
              } else {
                  if (checkColumns) {
                      throw new InvalidDataAccessApiUsageException("Unable to map column '" + column
                              + "' to any properties of bean " + this.mappedClass.getName());
                  }
                  if (warnEnabled && rowNumber == 0) {
                      logger.warn("Unable to map column '" + column + "' to any properties of bean "
                              + this.mappedClass.getName());
                  }
              }
          }
  
          if (populatedProperties != null && !populatedProperties.equals(this.mappedProperties)) {
              throw new InvalidDataAccessApiUsageException(
                      "Given ResultSet does not contain all fields "
                              + "necessary to populate object of class [" + this.mappedClass + "]: "
                              + this.mappedProperties);
          }
  
          return mappedObject;
      }