use of org.jdbi.v3.sqlobject.customizer.BindMap in project jdbi by jdbi.
the class BindMapFactory method createForParameter.
@Override
public SqlStatementParameterCustomizer createForParameter(Annotation a, Class<?> sqlObjectType, Method method, Parameter param, int index, Type type) {
BindMap annotation = (BindMap) a;
List<String> keys = Arrays.asList(annotation.keys());
String prefix = annotation.value().isEmpty() ? "" : annotation.value() + ".";
return (stmt, arg) -> {
Map<?, ?> map = (Map<?, ?>) arg;
Map<String, Object> toBind = new HashMap<>();
map.forEach((k, v) -> {
if (annotation.convertKeys() || k instanceof String) {
String key = k.toString();
if (keys.isEmpty() || keys.contains(key)) {
toBind.put(prefix + key, v);
}
} else {
throw new IllegalArgumentException("Key " + k + " (of " + k.getClass() + ") must be a String");
}
});
keys.forEach(key -> toBind.putIfAbsent(prefix + key, null));
stmt.bindMap(toBind);
};
}
Aggregations