From adc8a474b4044bf50a8573b3a6f0b917099c7e64 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 4 Feb 2013 16:29:43 +0100 Subject: [PATCH] [#1170] Improve performance on jOOQ's reflection usage - Access record values by index, rather than by field, to further improve performance --- .../java/org/jooq/impl/ReflectionMapper.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ReflectionMapper.java b/jOOQ/src/main/java/org/jooq/impl/ReflectionMapper.java index 889b75f1d3..8e2576d958 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ReflectionMapper.java +++ b/jOOQ/src/main/java/org/jooq/impl/ReflectionMapper.java @@ -281,12 +281,12 @@ class ReflectionMapper implements RecordMapper { // [#935] Avoid setting final fields if ((member.getModifiers() & Modifier.FINAL) == 0) { - map(record, result, member, field); + map(record, result, member, i); } } for (java.lang.reflect.Method method : methods[i]) { - method.invoke(result, record.getValue(field, method.getParameterTypes()[0])); + method.invoke(result, record.getValue(i, method.getParameterTypes()[0])); } } @@ -297,37 +297,37 @@ class ReflectionMapper implements RecordMapper { } } - private final void map(Record record, Object result, java.lang.reflect.Field member, Field field) throws IllegalAccessException { + private final void map(Record record, Object result, java.lang.reflect.Field member, int index) throws IllegalAccessException { Class mType = member.getType(); if (mType.isPrimitive()) { if (mType == byte.class) { - member.setByte(result, record.getValue(field, byte.class)); + member.setByte(result, record.getValue(index, byte.class)); } else if (mType == short.class) { - member.setShort(result, record.getValue(field, short.class)); + member.setShort(result, record.getValue(index, short.class)); } else if (mType == int.class) { - member.setInt(result, record.getValue(field, int.class)); + member.setInt(result, record.getValue(index, int.class)); } else if (mType == long.class) { - member.setLong(result, record.getValue(field, long.class)); + member.setLong(result, record.getValue(index, long.class)); } else if (mType == float.class) { - member.setFloat(result, record.getValue(field, float.class)); + member.setFloat(result, record.getValue(index, float.class)); } else if (mType == double.class) { - member.setDouble(result, record.getValue(field, double.class)); + member.setDouble(result, record.getValue(index, double.class)); } else if (mType == boolean.class) { - member.setBoolean(result, record.getValue(field, boolean.class)); + member.setBoolean(result, record.getValue(index, boolean.class)); } else if (mType == char.class) { - member.setChar(result, record.getValue(field, char.class)); + member.setChar(result, record.getValue(index, char.class)); } } else { - member.set(result, record.getValue(field, mType)); + member.set(result, record.getValue(index, mType)); } } } @@ -402,13 +402,11 @@ class ReflectionMapper implements RecordMapper { public final E map(R record) { try { for (int i = 0; i < fields.length; i++) { - Field field = fields[i]; - for (java.lang.reflect.Field member : members[i]) { int index = propertyNames.indexOf(member.getName()); if (index >= 0) { - parameterValues[index] = record.getValue(field); + parameterValues[index] = record.getValue(i); } } @@ -417,7 +415,7 @@ class ReflectionMapper implements RecordMapper { int index = propertyNames.indexOf(name); if (index >= 0) { - parameterValues[index] = record.getValue(field); + parameterValues[index] = record.getValue(i); } } }