package com.walker.jdbc;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.jdbc.core.RowMapper;
|
import org.springframework.jdbc.support.JdbcUtils;
|
import org.springframework.util.LinkedCaseInsensitiveMap;
|
|
import java.sql.ResultSet;
|
import java.sql.ResultSetMetaData;
|
import java.sql.SQLException;
|
import java.util.Map;
|
|
public class ColumnMapRowMapper implements RowMapper<Map<String, Object>> {
|
private static final Logger logger = LoggerFactory.getLogger(ColumnMapRowMapper.class);
|
|
public ColumnMapRowMapper() {
|
}
|
|
public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
|
ResultSetMetaData rsmd = rs.getMetaData();
|
int columnCount = rsmd.getColumnCount();
|
Map<String, Object> mapOfColValues = this.createColumnMap(columnCount);
|
|
for (int i = 1; i <= columnCount; ++i) {
|
String key = this.getColumnKey(JdbcUtils.lookupColumnName(rsmd, i));
|
Object obj = this.getColumnValue(rs, i);
|
mapOfColValues.put(key.toLowerCase(), obj);
|
}
|
|
return mapOfColValues;
|
}
|
|
protected Map<String, Object> createColumnMap(int columnCount) {
|
return new LinkedCaseInsensitiveMap(columnCount) {
|
@Override
|
public Object get(Object key) {
|
if (!super.containsKey(key)) {
|
logger.error("doesn't have key -> {}", key);
|
}
|
return super.get(key);
|
}
|
};
|
}
|
|
protected String getColumnKey(String columnName) {
|
return columnName;
|
}
|
|
protected Object getColumnValue(ResultSet rs, int index) throws SQLException {
|
return JdbcUtils.getResultSetValue(rs, index);
|
}
|
}
|