Simplified implementation of SimpleParameterAccessor.
Changed API of Parameters and Parameter class accordingly. Adapted test cases as well.
This commit is contained in:
@@ -78,19 +78,6 @@ public final class Parameter {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Copy constructor to put a {@link Parameter} into another context.
|
||||
*
|
||||
* @param parameter
|
||||
* @param parameters
|
||||
* @param index
|
||||
*/
|
||||
Parameter(Parameter parameter, Parameters parameters, int index) {
|
||||
|
||||
this(parameter.type, parameters, index, parameter.name);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns whether the {@link Parameter} is the first one.
|
||||
*
|
||||
@@ -162,7 +149,7 @@ public final class Parameter {
|
||||
if (isNamedParameter()) {
|
||||
return format(NAMED_PARAMETER_TEMPLATE, getName());
|
||||
} else {
|
||||
return format(POSITION_PARAMETER_TEMPLATE, getParameterIndex());
|
||||
return format(POSITION_PARAMETER_TEMPLATE, getIndex());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,9 +160,9 @@ public final class Parameter {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getParameterIndex() {
|
||||
public int getIndex() {
|
||||
|
||||
return parameters.getPlaceholderPosition(this);
|
||||
return index;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -124,8 +124,7 @@ public final class Parameters implements Iterable<Parameter> {
|
||||
for (int i = 0; i < originals.size(); i++) {
|
||||
|
||||
Parameter original = originals.get(i);
|
||||
|
||||
this.parameters.add(new Parameter(original, this, i));
|
||||
this.parameters.add(original);
|
||||
|
||||
pageableIndexTemp = original.isPageable() ? i : -1;
|
||||
sortIndexTemp = original.isSort() ? i : -1;
|
||||
@@ -265,29 +264,17 @@ public final class Parameters implements Iterable<Parameter> {
|
||||
|
||||
|
||||
/**
|
||||
* Returns the index of the placeholder inside a query for the parameter
|
||||
* with the given index. They might differ from the parameter index as the
|
||||
* method signature can contain special parameters (e.g. {@link Sort},
|
||||
* {@link Pageable}) that are not bound as plain query parameters but rather
|
||||
* handled differently.
|
||||
* Returns a bindable parameter with the given index. So for a method with a
|
||||
* signature of {@code (Pageable pageable, String name)} a call to
|
||||
* {@code #getBindableParameter(0)} will return the {@link String}
|
||||
* parameter.
|
||||
*
|
||||
* @param index
|
||||
* @return the placeholder postion for the parameter with the given index.
|
||||
* Will return -1 for special parameters.
|
||||
* @param bindableIndex
|
||||
* @return
|
||||
*/
|
||||
int getPlaceholderPosition(Parameter parameter) {
|
||||
public Parameter getBindableParameter(int bindableIndex) {
|
||||
|
||||
return parameter.isSpecialParameter() ? -1
|
||||
: getPlaceholderPositionRecursively(parameter);
|
||||
}
|
||||
|
||||
|
||||
private int getPlaceholderPositionRecursively(Parameter parameter) {
|
||||
|
||||
int result = parameter.isSpecialParameter() ? 0 : 1;
|
||||
|
||||
return parameter.isFirst() ? result - 1 : result
|
||||
+ getPlaceholderPositionRecursively(parameter.getPrevious());
|
||||
return getBindableParameters().getParameter(bindableIndex);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -90,20 +90,8 @@ public class SimpleParameterAccessor {
|
||||
|
||||
private Object getBindableValue(int index) {
|
||||
|
||||
int bindableCount = 0;
|
||||
|
||||
for (Parameter parameter : parameters) {
|
||||
|
||||
if (parameter.isBindable() && bindableCount == index) {
|
||||
return values[parameter.getParameterIndex()];
|
||||
}
|
||||
|
||||
if (parameter.isBindable()) {
|
||||
bindableCount++;
|
||||
}
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException();
|
||||
return values[parameters.getBindableParameter(index).getIndex()];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -102,9 +102,7 @@ public class ParametersUnitTests {
|
||||
String.class);
|
||||
|
||||
Parameters parameters = new Parameters(method);
|
||||
|
||||
assertThat(parameters.getParameter(0).getParameterIndex(), is(-1));
|
||||
assertThat(parameters.getParameter(1).getParameterIndex(), is(0));
|
||||
assertThat(parameters.getBindableParameter(0).getIndex(), is(1));
|
||||
|
||||
method =
|
||||
SampleDao.class.getMethod("validWithSortInBetween",
|
||||
@@ -112,9 +110,8 @@ public class ParametersUnitTests {
|
||||
|
||||
parameters = new Parameters(method);
|
||||
|
||||
assertThat(parameters.getParameter(0).getParameterIndex(), is(0));
|
||||
assertThat(parameters.getParameter(1).getParameterIndex(), is(-1));
|
||||
assertThat(parameters.getParameter(2).getParameterIndex(), is(1));
|
||||
assertThat(parameters.getBindableParameter(0).getIndex(), is(0));
|
||||
assertThat(parameters.getBindableParameter(1).getIndex(), is(2));
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user