
org.sfm.jdbc.impl.DynamicJdbcMapper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of simpleFlatMapper Show documentation
Show all versions of simpleFlatMapper Show documentation
Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.
package org.sfm.jdbc.impl;
import org.sfm.jdbc.JdbcColumnKey;
import org.sfm.jdbc.JdbcMapper;
import org.sfm.jdbc.JdbcMapperBuilder;
import org.sfm.jdbc.SQLMappingException;
import org.sfm.jdbc.impl.getter.ResultSetGetterFactory;
import org.sfm.map.*;
import org.sfm.map.impl.ColumnsMapperKey;
import org.sfm.map.impl.FieldMapperColumnDefinition;
import org.sfm.map.impl.MapperCache;
import org.sfm.reflect.meta.ClassMeta;
import org.sfm.reflect.meta.PropertyNameMatcherFactory;
import org.sfm.utils.RowHandler;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Iterator;
//IFJAVA8_START
import java.util.stream.Stream;
//IFJAVA8_END
public final class DynamicJdbcMapper implements JdbcMapper {
private final ClassMeta classMeta;
private final FieldMapperErrorHandler fieldMapperErrorHandler;
private final MapperBuilderErrorHandler mapperBuilderErrorHandler;
private final ColumnDefinitionProvider, JdbcColumnKey> columnDefinitions;
private final PropertyNameMatcherFactory propertyNameMatcherFactory;
private final RowHandlerErrorHandler rowHandlerErrorHandler;
private MapperCache> mapperCache = new MapperCache>();
public DynamicJdbcMapper(final ClassMeta classMeta,
final FieldMapperErrorHandler fieldMapperErrorHandler,
final MapperBuilderErrorHandler mapperBuilderErrorHandler,
RowHandlerErrorHandler rowHandlerErrorHandler,
final ColumnDefinitionProvider, JdbcColumnKey> columnDefinitions,
PropertyNameMatcherFactory propertyNameMatcherFactory) {
this.classMeta = classMeta;
this.fieldMapperErrorHandler = fieldMapperErrorHandler;
this.mapperBuilderErrorHandler = mapperBuilderErrorHandler;
this.columnDefinitions = columnDefinitions;
this.propertyNameMatcherFactory = propertyNameMatcherFactory;
this.rowHandlerErrorHandler = rowHandlerErrorHandler;
}
@Override
public final T map(final ResultSet source) throws MappingException {
try {
final JdbcMapper mapper = buildMapper(source.getMetaData());
return mapper.map(source);
} catch(SQLException e) {
throw new SQLMappingException(e.getMessage(), e);
}
}
@Override
public final > H forEach(final ResultSet rs, final H handle)
throws SQLException, MappingException {
final JdbcMapper mapper = buildMapper(rs.getMetaData());
return mapper.forEach(rs, handle);
}
@Override
@Deprecated
public final Iterator iterate(final ResultSet rs)
throws SQLException, MappingException {
final JdbcMapper mapper = buildMapper(rs.getMetaData());
return mapper.iterator(rs);
}
@Override
@SuppressWarnings("deprecation")
public final Iterator iterator(final ResultSet rs)
throws SQLException, MappingException {
return iterate(rs);
}
//IFJAVA8_START
@Override
public Stream stream(ResultSet rs) throws SQLException, MappingException {
final JdbcMapper mapper = buildMapper(rs.getMetaData());
return mapper.stream(rs);
}
//IFJAVA8_END
public JdbcMapper buildMapper(final ResultSetMetaData metaData) throws MapperBuildingException, SQLException {
final ColumnsMapperKey key = mapperKey(metaData);
JdbcMapper mapper = mapperCache.get(key);
if (mapper == null) {
final JdbcMapperBuilder builder = new JdbcMapperBuilder(classMeta, mapperBuilderErrorHandler,columnDefinitions, propertyNameMatcherFactory, new ResultSetGetterFactory());
builder.jdbcMapperErrorHandler(rowHandlerErrorHandler);
builder.fieldMapperErrorHandler(fieldMapperErrorHandler);
builder.addMapping(metaData);
mapper = builder.mapper();
mapperCache.add(key, mapper);
}
return mapper;
}
private static ColumnsMapperKey mapperKey(final ResultSetMetaData metaData) throws SQLException {
final String[] columns = new String[metaData.getColumnCount()];
for(int i = 0; i < columns.length; i++) {
columns[i] = metaData.getColumnLabel(i + 1);
}
return new ColumnsMapperKey(columns);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy