org.sfm.jdbc.ResultSetMapperBuilderImpl Maven / Gradle / Ivy
package org.sfm.jdbc;
import java.lang.reflect.Type;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Map;
import org.sfm.map.AbstractMapperBuilderImpl;
import org.sfm.map.FieldMapper;
import org.sfm.map.MapperBuildingException;
import org.sfm.map.RethrowRowHandlerErrorHandler;
import org.sfm.map.RowHandlerErrorHandler;
import org.sfm.reflect.ReflectionService;
import org.sfm.reflect.meta.ClassMeta;
public final class ResultSetMapperBuilderImpl extends AbstractMapperBuilderImpl, ResultSetMapperBuilder> implements ResultSetMapperBuilder {
private final Map aliases;
private int columnIndex = 1;
protected final Map> customMappings;
private RowHandlerErrorHandler jdbcMapperErrorHandler = new RethrowRowHandlerErrorHandler();
public ResultSetMapperBuilderImpl(final Type target) throws MapperBuildingException {
this(target, new ReflectionService());
}
public ResultSetMapperBuilderImpl(final Type target, ReflectionService reflectService) throws MapperBuildingException {
this(target, reflectService, null, null);
}
@SuppressWarnings("unchecked")
public ResultSetMapperBuilderImpl(final Type target, ReflectionService reflectService, final Map aliases, Map> customMappings) throws MapperBuildingException {
this(target, (ClassMeta) reflectService.getClassMeta(target), aliases, customMappings);
}
public ResultSetMapperBuilderImpl(final Type target, final ClassMeta classMeta, final Map aliases, Map> customMappings) throws MapperBuildingException {
super(target, ResultSet.class, classMeta, new ResultSetGetterFactory(), new ResultSetFieldMapperFactory(new ResultSetGetterFactory()));
this.aliases = aliases;
this.customMappings = customMappings;
}
@Override
public final ResultSetMapperBuilder addNamedColumn(final String column) {
return addNamedColumn(column, ResultSetGetterFactory.UNDEFINED);
}
@Override
public final ResultSetMapperBuilder addIndexedColumn(final String column) {
return addIndexedColumn(column, columnIndex ++);
}
@Override
public final ResultSetMapperBuilder addIndexedColumn(final String column, final int columnIndex) {
return addIndexedColumn(column, columnIndex, ResultSetGetterFactory.UNDEFINED);
}
@Override
public final ResultSetMapperBuilder addMapping(final String property, final String column) {
return addMapping(property, column, ResultSetGetterFactory.UNDEFINED);
}
@Override
public final ResultSetMapperBuilder addMapping(final String property, final int column) {
return addMapping(property, column, ResultSetGetterFactory.UNDEFINED);
}
@Override
public final ResultSetMapperBuilder addNamedColumn(final String column, final int sqlType) {
return addMapping(columnToPropertyName(column), column, sqlType);
}
private String columnToPropertyName(String column) {
if (aliases == null || aliases.isEmpty()) {
return column;
}
String alias = aliases.get(column.toUpperCase());
if (alias == null) {
return column;
}
return alias;
}
@Override
public final ResultSetMapperBuilder addIndexedColumn(final String column, final int columnIndex, final int sqlType) {
return addMapping(columnToPropertyName(column), new ColumnKey(column, columnIndex, sqlType));
}
@Override
public final ResultSetMapperBuilder addMapping(final String propertyName, final int columnIndex, final int sqlType) {
return addMapping(propertyName, new ColumnKey("column:"+ columnIndex, columnIndex, sqlType));
}
@Override
public ResultSetMapperBuilder addMapping(String propertyName, String column,
int sqlType) {
return addMapping(propertyName, new ColumnKey(column, -1, sqlType));
}
@Override
public final ResultSetMapperBuilder addMapping(final ResultSetMetaData metaData) throws SQLException {
for(int i = 1; i <= metaData.getColumnCount(); i++) {
addIndexedColumn(metaData.getColumnLabel(i), i, metaData.getColumnType(i));
}
return this;
}
@Override
@SuppressWarnings("unchecked")
protected FieldMapper getCustomMapper(final ColumnKey columnKey) {
return customMappings != null ? (FieldMapper) customMappings.get(columnKey.getColumnName().toUpperCase()) : null;
}
@Override
public JdbcMapper mapper() {
if (reflectionService.isAsmActivated()) {
try {
return reflectionService.getAsmFactory().createJdbcMapper(fields(), getInstantiator(), getTargetClass(), jdbcMapperErrorHandler);
} catch(Exception e) {
return new JdbcMapperImpl(fields(), getInstantiator(), jdbcMapperErrorHandler);
}
} else {
return new JdbcMapperImpl(fields(), getInstantiator(), jdbcMapperErrorHandler);
}
}
@Override
protected MapperBuilder newMapperBuilder(Type type, ClassMeta classMeta) {
return new ResultSetMapperBuilderImpl(type, classMeta, aliases, customMappings);
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy