org.sfm.jdbc.JdbcMapperBuilder 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.jdbc.impl.JdbcMapperImpl;
import org.sfm.jdbc.impl.ResultSetFieldMapperFactory;
import org.sfm.jdbc.impl.getter.ResultSetGetterFactory;
import org.sfm.map.FieldMapperErrorHandler;
import org.sfm.map.MapperBuilderErrorHandler;
import org.sfm.map.MapperBuildingException;
import org.sfm.map.RowHandlerErrorHandler;
import org.sfm.map.impl.AbstractFieldMapperMapperBuilder;
import org.sfm.map.impl.FieldMapper;
import org.sfm.map.impl.KeyFieldMapperCouple;
import org.sfm.map.impl.RethrowRowHandlerErrorHandler;
import org.sfm.reflect.ReflectionService;
import org.sfm.reflect.meta.ClassMeta;
public final class JdbcMapperBuilder extends AbstractFieldMapperMapperBuilder {
private int columnIndex = 1;
private RowHandlerErrorHandler jdbcMapperErrorHandler = new RethrowRowHandlerErrorHandler();
public JdbcMapperBuilder(final Type target) throws MapperBuildingException {
this(target, new ReflectionService());
}
public JdbcMapperBuilder(final Type target, ReflectionService reflectService) throws MapperBuildingException {
this(target, reflectService, null, null);
}
@SuppressWarnings("unchecked")
public JdbcMapperBuilder(final Type target, ReflectionService reflectService, final Map aliases, Map> customMappings) throws MapperBuildingException {
this(target, (ClassMeta) reflectService.getClassMeta(target), aliases, customMappings);
}
public JdbcMapperBuilder(final Type target, final ClassMeta classMeta, final Map aliases, Map> customMappings) throws MapperBuildingException {
super(target, ResultSet.class, classMeta, new ResultSetGetterFactory(), new ResultSetFieldMapperFactory(new ResultSetGetterFactory()), aliases, customMappings);
}
@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);
}
}
public JdbcMapperBuilder addMapping(String column) {
return addMapping(column, columnIndex++);
}
public JdbcMapperBuilder addMapping(String column, int index) {
return addMapping(column, index, JdbcColumnKey.UNDEFINED_TYPE);
}
public JdbcMapperBuilder addMapper(FieldMapper mapper) {
mappers.add(new KeyFieldMapperCouple(null, mapper));
return this;
}
public JdbcMapperBuilder addMapping(final String column, final int columnIndex, final int sqlType) {
addMapping(new JdbcColumnKey(column, columnIndex, sqlType));
return this;
}
public JdbcMapperBuilder addMapping(final ResultSetMetaData metaData) throws SQLException {
for(int i = 1; i <= metaData.getColumnCount(); i++) {
addMapping(metaData.getColumnLabel(i), i, metaData.getColumnType(i));
}
return this;
}
public JdbcMapperBuilder fieldMapperErrorHandler(FieldMapperErrorHandler errorHandler) {
setFieldMapperErrorHandler(errorHandler);
return this;
}
public JdbcMapperBuilder mapperBuilderErrorHandler(MapperBuilderErrorHandler errorHandler) {
setMapperBuilderErrorHandler(errorHandler);
return this;
}
@Override
protected AbstractFieldMapperMapperBuilder newSubBuilder(Type type, ClassMeta classMeta) {
return new JdbcMapperBuilder(type, classMeta, aliases, customMappings);
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy