Author: cbegin Date: Sat Jan 9 20:02:43 2010 New Revision: 897529 URL: http://svn.apache.org/viewvc?rev=897529&view=rev Log: applied ibatis-3beta7-mapfix3.patch provided by Martin Ellis and Joe Gooch as per email thread: Using Map as a parameter object 12-Dec-2009
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java?rev=897529&r1=897528&r2=897529&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java Sat Jan 9 20:02:43 2010 @@ -10,6 +10,8 @@ public class DynamicContext { + public static final String PARAMETER_OBJECT_KEY = "_parameter"; + static { OgnlRuntime.setPropertyAccessor(ContextMap.class, new ContextAccessor()); } @@ -19,16 +21,14 @@ private int uniqueNumber = 0; public DynamicContext(Object parameterObject) { - if (parameterObject instanceof Map) { - bindings.putAll((Map<String, Object>) parameterObject); - } else if (parameterObject != null) { + if (parameterObject != null && !(parameterObject instanceof Map)) { MetaObject metaObject = MetaObject.forObject(parameterObject); String[] names = metaObject.getGetterNames(); for (String name : names) { bindings.put(name, metaObject.getValue(name)); } } - bindings.put("_parameter", parameterObject); + bindings.put(PARAMETER_OBJECT_KEY, parameterObject); } public Map<String, Object> getBindings() { @@ -56,10 +56,22 @@ } static class ContextAccessor implements PropertyAccessor { + public Object getProperty(Map context, Object target, Object name) throws OgnlException { Map map = (Map) target; - return map.get(name); + + Object result = map.get(name); + if (result != null) { + return result; + } + + Object parameterObject = map.get(PARAMETER_OBJECT_KEY); + if (parameterObject instanceof Map) { + return ((Map)parameterObject).get(name); + } + + return null; } public void setProperty(Map context, Object target, Object name, Object value)