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> { private static final Logger logger = LoggerFactory.getLogger(ColumnMapRowMapper.class); public ColumnMapRowMapper() { } public Map mapRow(ResultSet rs, int rowNum) throws SQLException { ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); Map 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 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); } }