package org.jdbi.v3.sqlobject.customizer.internal;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.lang.reflect.Type;
import java.util.Optional;
import org.jdbi.v3.core.qualifier.QualifiedType;
import org.jdbi.v3.core.qualifier.Qualifiers;
import org.jdbi.v3.sqlobject.customizer.Bind;
import org.jdbi.v3.sqlobject.customizer.SqlStatementCustomizerFactory;
import org.jdbi.v3.sqlobject.customizer.SqlStatementParameterCustomizer;
import org.jdbi.v3.sqlobject.internal.ParameterUtil;
public class BindFactory implements SqlStatementCustomizerFactory {
@Override
public SqlStatementParameterCustomizer createForParameter(Annotation annotation,
Class<?> sqlObjectType,
Method method,
Parameter param,
int index,
Type type) {
Bind b = (Bind) annotation;
String nameFromAnnotation = b == null ? Bind.NO_VALUE : b.value();
Optional<String> name = ParameterUtil.findParameterName(nameFromAnnotation, param);
return (stmt, arg) -> {
QualifiedType<?> qualifiedType = QualifiedType.of(type).withAnnotations(
stmt.getConfig(Qualifiers.class).findFor(param));
stmt.bindByType(index, arg, qualifiedType);
name.ifPresent(n -> stmt.bindByType(n, arg, qualifiedType));
};
}
}