private <P> PlaceHolderValueGetter<T> build(JdbcColumnKey key, PropertyMapping<T, P, JdbcColumnKey> pm) {
if (pm != null) {
int parameterType =
getParameterType(pm);
ContextualGetter<T, ? extends P> getter = ContextualGetterAdapter.of(pm.getPropertyMeta().getGetter());
final DefaultContextFactoryBuilder contextFactoryBuilder = new DefaultContextFactoryBuilder();
Type propertyType = pm.getPropertyMeta().getPropertyType();
Class<?> sqlType = JdbcTypeHelper.toJavaType(parameterType, propertyType);
if (!TypeHelper.isAssignable(sqlType, propertyType)) {
ContextualConverter<? super Object, ?> converter = ConverterService.getInstance().findConverter(propertyType, sqlType, contextFactoryBuilder);
if (converter != null) {
getter = new FieldMapperGetterWithConverter(converter, getter);
}
}
return
new PlaceHolderValueGetter<T>(pm.getColumnKey().getOrginalName(),
parameterType,
null, getter, contextFactoryBuilder.build());
} else {
return
new PlaceHolderValueGetter<T>(key.getOrginalName(),
key.getSqlType(null),
null, NullContextualGetter.<T, P>getter(),
EmptyContextFactory.INSTANCE);
}
}