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; }
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; }