您的位置:首页 > 移动开发

将每行映射为MAP对象的RowMapper实现

2010-04-23 09:40 417 查看
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.LinkedHashMap;
import java.util.Map;

import com.huawei.widget.commons.dao.RowMapper;
import com.huawei.widget.commons.dao.util.JdbcUtils;

/**
* 将每行映射为MAP对象的RowMapper实现。
*
* @author g00106664
* @version C02 2009-4-27
* @since OpenEye WIDGET_SRV V100R001C02
*/
@SuppressWarnings("unchecked")
public class ColumnMapRowMapper implements RowMapper<Map>
{

/**
* 此方法用于将每行数据映射为实体类。
*
* @param rs
* ResultSet
* @param rowNum
* the row num
* @return the t
* @throws java.sql.SQLException
* the SQL exception
* @see com.huawei.widget.db.RowMapper#mapRow(ResultSet, int)
*/
public Map mapRow(ResultSet rs, int rowNum) throws SQLException
{
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();

Map mapOfColValues = createColumnMap(columnCount);
for (int i = 1; i <= columnCount; i++)
{
String key = getColumnKey(rsmd.getColumnName(i));
Object obj = getColumnValue(rs, i);
mapOfColValues.put(key.toLowerCase(), obj);
}
return mapOfColValues;
}

/**
* Create a Map instance to be used as column map.
* <p>
* By default, a linked case-insensitive Map will be created if possible,
* else a plain HashMap (see Spring's CollectionFactory).
*
* @param columnCount
* the column count, to be used as initial capacity for the Map
* @return the new Map instance
* @see org.springframework.core.CollectionFactory#createLinkedCaseInsensitiveMapIfPossible
*/
protected Map createColumnMap(int columnCount)
{
return new LinkedHashMap(columnCount);
}

/**
* Determine the key to use for the given column in the column Map.
*
* @param columnName
* the column name as returned by the ResultSet
* @return the column key to use
* @see java.sql.ResultSetMetaData#getColumnName
*/
protected String getColumnKey(String columnName)
{
return columnName;
}

/**
* Retrieve a JDBC object value for the specified column.
* <p>
* The default implementation uses the <code>getObject</code> method.
* Additionally, this implementation includes a "hack" to get around Oracle
* returning a non standard object for their TIMESTAMP datatype.
*
* @param rs
* is the ResultSet holding the data
* @param index
* is the column index
* @return the Object returned
* @throws java.sql.SQLException
* 如有异常,抛出。
* @see org.springframework.jdbc.support.JdbcUtils#getResultSetValue
*/
protected Object getColumnValue(ResultSet rs, int index)
throws SQLException
{
return JdbcUtils.getResultSetValue(rs, index);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: