Example #1
0
  public BoundSql getBoundSql(Object parameterObject) {
    BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
    List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
    if (parameterMappings == null || parameterMappings.size() <= 0) {
      boundSql =
          new BoundSql(
              configuration,
              boundSql.getSql(),
              parameterMap.getParameterMappings(),
              parameterObject);
    }

    // check for nested result maps in parameter mappings (issue #30)
    for (ParameterMapping pm : boundSql.getParameterMappings()) {
      String rmId = pm.getResultMapId();
      if (rmId != null) {
        ResultMap rm = configuration.getResultMap(rmId);
        if (rm != null) {
          hasNestedResultMaps |= rm.hasNestedResultMaps();
        }
      }
    }

    return boundSql;
  }
Example #2
0
 public Builder resultMaps(List<ResultMap> resultMaps) {
   mappedStatement.resultMaps = resultMaps;
   for (ResultMap resultMap : resultMaps) {
     mappedStatement.hasNestedResultMaps =
         mappedStatement.hasNestedResultMaps || resultMap.hasNestedResultMaps();
   }
   return this;
 }
  public <T> List<T> buildResultForList(
      ResultSet res,
      int containersize,
      boolean ispagine,
      Class<T> objectType,
      RowHandler rowHandler)
      throws SQLException {
    int rowcount = 0;
    if (meta == null) this.cacheResultSetMetaData(res, ispagine);

    List<T> results = new ArrayList<T>(containersize);
    // Object[] results = new Object[containersize];

    boolean go = true;
    if (ispagine) go = res.next() && rowcount < getMaxsize();
    else go = res.next();
    // 从结果集中获取当前游标后maxsize条记录

    boolean ismap = Map.class.isAssignableFrom(objectType);
    ClassInfo beanInfo = ClassUtil.getClassInfo(objectType);
    while (go) {
      T record = ResultMap.buildValueObject(res, objectType, this, rowHandler, ismap, beanInfo);
      results.add(record);
      rowcount++;
      if (ispagine) go = res.next() && rowcount < getMaxsize();
      else go = res.next();
    }

    return results;
  }
  public String buildResultForXml(
      ResultSet res, int containersize, boolean ispagine, Class objectType, RowHandler rowHandler)
      throws SQLException {
    StringBuffer results = new StringBuffer();
    XMLRowHandler xhdl = null;
    try {
      boolean isxmlhandler = false;
      if (rowHandler == null) {
        xhdl = new XMLRowHandler();
        xhdl.init(this.getMeta(), this.getDbname());
        rowHandler = xhdl;
        isxmlhandler = true;
      } else if (rowHandler instanceof XMLRowHandler) {
        isxmlhandler = true;
        xhdl = (XMLRowHandler) rowHandler;
        xhdl.init(this.getMeta(), this.getDbname());
      }

      //		boolean isxmlhandler = rowHandler != null && rowHandler instanceof XMLRowHandler;

      if (!isxmlhandler) // 行处理器不是从XMLRowHandler处理器继承时进入这个分支
      {
        results.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
        results.append("<records>\r\n");

      } else {

        results
            .append("<?xml version=\"")
            .append(xhdl.getVersion())
            .append("\" encoding=\"")
            .append(xhdl.getEncoding())
            .append("\"?>\r\n");
        results.append("<").append(xhdl.getRootName()).append(">\r\n");
      }
      rowcount = 0;
      if (meta == null) this.cacheResultSetMetaData(res, ispagine);
      boolean go = true;
      if (ispagine) go = res.next() && rowcount < getMaxsize();
      else go = res.next();
      // 从结果集中获取当前游标后maxsize条记录
      while (go) {
        StringBuffer record =
            ResultMap.buildSingleRecordXMLString(res, this, rowHandler, this.dbadapter);
        results.append(record);
        rowcount++;
        if (ispagine) go = res.next() && rowcount < getMaxsize();
        else go = res.next();
      }
      if (!isxmlhandler) {
        results.append("\r\n").append("</records>");
      } else {
        results.append("\r\n").append("</").append(xhdl.getRootName()).append(">");
      }
    } finally {
      if (xhdl != null) xhdl.destroy();
    }
    return results.toString();
  }
  public Object[] buildResultForObjectArray(
      ResultSet res, int containersize, boolean ispagine, Class objectType, RowHandler rowHandler)
      throws SQLException {
    int rowcount = 0;
    if (meta == null) this.cacheResultSetMetaData(res, ispagine);

    Object[] results = new Object[containersize];

    boolean go = true;
    if (ispagine) go = res.next() && rowcount < getMaxsize();
    else go = res.next();

    // 从结果集中获取当前游标后maxsize条记录

    boolean ismap = Map.class.isAssignableFrom(objectType);
    ClassInfo beanInfo = ClassUtil.getClassInfo(objectType);
    while (go) {

      if (rowcount == results.length) {
        Object[] temp = new Object[results.length + 10];
        for (int t = 0; t < results.length; t++) {
          temp[t] = results[t];
        }
        results = temp;
      }

      Object record =
          ResultMap.buildValueObject(res, objectType, this, rowHandler, ismap, beanInfo);
      results[rowcount] = record;
      rowcount++;
      if (ispagine) go = res.next() && rowcount < getMaxsize();
      else go = res.next();
    }

    if (results[0] == null) {
      // modified by biaoping.yin on 2005.03.28
      return null;
    }

    Object[] temp = null;
    for (int i = 0; i < results.length; i++) {
      if (results[i] == null) {
        temp = new Object[i];
        break;
      } else {
        temp = new Object[results.length];
      }
    }
    for (int i = 0; i < temp.length; i++) {
      temp[i] = results[i];
    }
    results = temp;
    temp = null;
    return results;
  }
  public Record[] buildResult(ResultSet res, int containersize, boolean ispagine)
      throws SQLException {
    int rowcount = 0;
    if (meta == null) this.cacheResultSetMetaData(res, ispagine);

    Record[] results = new Record[containersize];

    boolean go = true;
    if (ispagine) go = res.next() && rowcount < getMaxsize();
    else go = res.next();

    // 从结果集中获取当前游标后maxsize条记录
    while (go) {

      if (rowcount == results.length) {
        Record[] temp = new Record[results.length + 10];
        for (int t = 0; t < results.length; t++) {
          temp[t] = results[t];
        }
        results = temp;
      }

      Record record = ResultMap.buildMap(res, this, this.dbadapter);

      results[rowcount] = record;
      rowcount++;
      if (ispagine) go = res.next() && rowcount < getMaxsize();
      else go = res.next();
    }

    if (results[0] == null) {
      // modified by biaoping.yin on 2005.03.28
      return null;
    }

    Record[] temp = null;
    for (int i = 0; i < results.length; i++) {
      if (results[i] == null) {
        temp = new Record[i];
        break;
      } else {
        temp = new Record[results.length];
      }
    }
    for (int i = 0; i < temp.length; i++) {
      temp[i] = results[i];
    }
    results = temp;
    temp = null;
    return results;
  }
  public int buildResult(ResultSet res, boolean ispagine, RowHandler rowHandler)
      throws SQLException {
    rowcount = 0;
    if (meta == null) this.cacheResultSetMetaData(res, ispagine);

    boolean go = true;
    if (ispagine) go = res.next() && rowcount < getMaxsize();
    else go = res.next();
    // 从结果集中获取当前游标后maxsize条记录
    while (go) {
      ResultMap.buildRecord(res, this, rowHandler, this.dbadapter);
      rowcount++;
      if (ispagine) go = res.next() && rowcount < getMaxsize();
      else go = res.next();
    }

    return rowcount;
  }
  public <T> ResultMap buildResultMap(
      ResultSet res,
      Class<T> objectType,
      RowHandler rowhandler,
      int containersize,
      boolean ispagine,
      int result_type)
      throws SQLException {
    ResultMap resultMap = new ResultMap();
    if (result_type == ResultMap.type_maparray
        || (result_type == ResultMap.type_objectarray && Map.class.isAssignableFrom(objectType))) {
      Record[] results = buildResult(res, containersize, ispagine);
      resultMap.setCommonresult(results);
      if (results != null) resultMap.setSize(results.length);
    } else if (result_type == ResultMap.type_list) {
      List<T> results = buildResultForList(res, containersize, ispagine, objectType, rowhandler);
      resultMap.setCommonresult(results);
      if (results != null) resultMap.setSize(results.size());
    } else if (result_type == ResultMap.type_objcet) // 分页时,不能指定返回值类型为type_objcet
    {
      if (!ispagine) {
        if (res.next()) {
          ClassInfo beanInfo = ClassUtil.getClassInfo(objectType);
          boolean ismap = Map.class.isAssignableFrom(objectType);
          T result = ResultMap.buildValueObject(res, objectType, this, rowhandler, ismap, beanInfo);
          resultMap.setCommonresult(result);
          if (result != null) {
            resultMap.setSize(1);
          }
        }
      }
      //			throw new SQLException("");
    } else if (result_type == ResultMap.type_objectarray) {
      Object[] results =
          buildResultForObjectArray(res, containersize, ispagine, objectType, rowhandler);
      resultMap.setCommonresult(results);
      if (results != null) {
        resultMap.setSize(results.length);
      }
    } else if (result_type == ResultMap.type_xml) {
      if (rowhandler == null) {
        rowhandler = new XMLRowHandler();
      }
      resultMap.setCommonresult(
          buildResultForXml(res, containersize, ispagine, objectType, rowhandler));
      resultMap.setSize(getRowcount());
    } else if (result_type == ResultMap.type_null) {
      if (rowhandler == null) {
        throw new NestedSQLException("rowhandler == null");
      }

      //            resultMap.setCommonresult(buildResultForXml(res, containersize, ispagine,
      // objectType, rowhandler));
      this.rowcount = buildResult(res, ispagine, rowhandler);
      resultMap.setSize(getRowcount());
    }
    return resultMap;
  }