Skip to content

Commit 8f4a619

Browse files
committed
Mimic DefaultParameterHandler logic when calculating the CacheKey
1 parent c1887e3 commit 8f4a619

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

src/main/java/org/apache/ibatis/executor/BaseExecutor.java

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -166,24 +166,27 @@ public CacheKey createCacheKey(MappedStatement ms, Object parameterObject, RowBo
166166
cacheKey.update(rowBounds.getLimit());
167167
cacheKey.update(boundSql.getSql());
168168
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
169-
if (parameterMappings.size() > 0 && parameterObject != null) {
170-
TypeHandlerRegistry typeHandlerRegistry = ms.getConfiguration().getTypeHandlerRegistry();
171-
if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
172-
cacheKey.update(parameterObject);
173-
} else {
174-
MetaObject metaObject = configuration.newMetaObject(parameterObject);
175-
for (ParameterMapping parameterMapping : parameterMappings) {
176-
String propertyName = parameterMapping.getProperty();
177-
if (boundSql.hasAdditionalParameter(propertyName)) { // issue #448 ask first for additional params
178-
cacheKey.update(boundSql.getAdditionalParameter(propertyName));
179-
} else if (metaObject.hasGetter(propertyName)) {
180-
cacheKey.update(metaObject.getValue(propertyName));
181-
}
169+
TypeHandlerRegistry typeHandlerRegistry = ms.getConfiguration().getTypeHandlerRegistry();
170+
for (int i = 0; i < parameterMappings.size(); i++) { // mimic DefaultParameterHandler logic
171+
ParameterMapping parameterMapping = parameterMappings.get(i);
172+
if (parameterMapping.getMode() != ParameterMode.OUT) {
173+
Object value;
174+
String propertyName = parameterMapping.getProperty();
175+
if (boundSql.hasAdditionalParameter(propertyName)) {
176+
value = boundSql.getAdditionalParameter(propertyName);
177+
} else if (parameterObject == null) {
178+
value = null;
179+
} else if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
180+
value = parameterObject;
181+
} else {
182+
MetaObject metaObject = configuration.newMetaObject(parameterObject);
183+
value = metaObject.getValue(propertyName);
182184
}
185+
cacheKey.update(value);
183186
}
184187
}
185188
return cacheKey;
186-
}
189+
}
187190

188191
public boolean isCached(MappedStatement ms, CacheKey key) {
189192
return localCache.getObject(key) != null;

0 commit comments

Comments
 (0)