Well, I think this has got to do with the way Ibatis is implemented. Here's an
example.
private List runQueryForList(SqlStatement localSql, Connection conn, Object
parameterObject, int skipResults, int maxResults, RowHandler rowHandler) throws
SQLException
{
List list;
if(log.isDebugEnabled())
{
log.debug("executeQueryForList: " + name);
conn = ConnectionLogProxy.newInstance(conn);
}
ErrorField errorField = new ErrorField();
if(rowHandler == null)
list = new ArrayList();
else
list = null;
ResultSet rs = null;
PreparedStatement ps = null;
String errorMessage = "Check the SQL statement.";
try
{
sqlMap.incrementExecutionThrottle(conn);
ps = createStatement(conn, localSql, parameterObject);
if(sqlMap.isDriverHintsEnabled() && maxResults != -1 &&
skipResults != -1)
{
ps.setFetchSize(maxResults + skipResults);
ps.setMaxRows(maxResults + skipResults);
}
errorMessage = "Check the Parameter Map (or inline parameters).";
applyParameterMap(localSql, ps, parameterObject, errorField);
errorField.errorField = null;
errorMessage = "Check the SQL statement.";
rs = ps.executeQuery();
for(int i = 0; i < skipResults; i++)
if(!rs.next())
break;
errorMessage = "Check the Result Map.";
int n = 0;
if(rowHandler == null)
{
for(; (maxResults == -1 || n < maxResults) && rs.next(); n++)
{
Object object = applyResultMap(conn, rs, null, errorField);
list.add(object);
}
errorField.errorField = null;
} else
{
for(; (maxResults == -1 || n < maxResults) && rs.next(); n++)
{
Object object = applyResultMap(conn, rs, null, errorField);
rowHandler.handleRow(object);
}
errorField.errorField = null;
}
}
catch(Throwable t)
{
Throwable tt = unwrapProxyException(t);
String msg = "";
if(errorField.errorField != null)
msg = "Error executing '" + name + "' in
'" + resourceName + "'. " + errorMessage + " Check the
'" + errorField + "' property. Cause: " + t;
else
msg = "Error executing '" + name + "' in
'" + resourceName + "'. " + errorMessage + " Cause: " +
t;
if(log.isErrorEnabled())
log.error(msg, t.fillInStackTrace());
if(t instanceof SQLException)
throw (SQLException)t;
else
throw new SQLException(msg);
}
finally
{
closeResultSet(rs);
closeStatement(ps);
sqlMap.decrementExecutionThrottle(conn);
}
notifyListeners();
return list;
}
BELOW IS THE applyResultMap METHOD
private Object applyResultMap(Connection conn, ResultSet rs, Object resultObject,
ErrorField errorField)
throws SQLException
{ Object object = resultObject;
String typeName = null;
if(getResultMapName() != null)
{
ResultMap map = getSqlMap().getResultMap(getResultMapName());
typeName = map.getClassName();
if(object == null)
object = instantiate(map.getClassName());
ResultMapping mapping;
for(Iterator names = map.getMappedPropertyNames(); names.hasNext();
setBeanProperty(mapping, object, conn, rs, errorField))
{
String propertyName = (String)names.next();
mapping = map.getResultMapping(propertyName);
}
} else
if(resultClass != null)
{
typeName = resultClass;
if(object == null)
object = instantiate(resultClass);
if(object instanceof BaseValue)
{
ResultMapping mapping = new ResultMapping();
mapping.setPropertyName("value");
mapping.setColumnName("VALUE");
mapping.setColumnIndex(new Integer(1));
setBeanProperty(mapping, object, conn, rs, errorField);
} else
if(object instanceof Map)
{
ResultSetMetaData rsmd = rs.getMetaData();
int i = 0;
for(int n = rsmd.getColumnCount(); i < n; i++)
{
String columnName = rsmd.getColumnLabel(i + 1);
((Map)object).put(columnName, rs.getObject(i + 1));
}
} else
{
autoMapResultSet(conn, rs, object, errorField);
}
}
if(typeName != null && object != null && (object instanceof
BaseValue) && !object.getClass().getName().equals(typeName))
object = StaticBeanProbe.getObject(object, "value");
return object;
}
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3960458#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...