Вы можете использовать RowMapper
, если вы сохраняете aspect_values в вашем аспектном объекте как объекты.Каждый вызов RowMapper
возвращает объект, поэтому вы получите коллекцию aspect_values.Если вам нужно построить объект аспекта (или объекты) со значениями, содержащимися в таблице aspect_value, тогда лучше выбрать ResultSetExtractor
.
Вот мои обещанные примеры.Я должен ввести их вручную, потому что наша сеть разработки находится только во внутренней сети, поэтому любые опечатки являются ошибками копирования, а не ошибками в коде.Это сокращенные версии внутренних классов в моем DAO:
. Это сопоставляет одну строку в ResultSet с объектом:
public List<MessageSummary> getMessages(Object[] params)
{
// mList is filled with objects created in MessageRowMapper,
// so the length of the list equal to the number of rows in the ResultSet
List<MessageSummary> mList = jdbcTemplate.query(sqlStr, new MessageRowMapper(),
params);
return mList;
}
private final class MessageRowMapper implements RowMapper<MessageSummary>
{
@Override
public MessageSummary mapRow(ResultSet rs, int i) throws SQLException
{
MessageSummary ms = new MessageSummary();
ms.setId(rs.getInt("id"));
ms.setMessage(rs.getString("message"));
return ms;
}
}
ResultSetExtractor
работает по той же идее, кроме картыВесь набор, а не просто преобразование строки в объект.Это полезно, когда ваш объект имеет атрибуты из нескольких строк.
public Map<Integer, List<String>> getResults(Object[] params)
{
Map<Integer, List<String>> result = jdbcTemplate.query(sqlStr, new ResultExtractor(),
params);
return result;
}
private final class ResultExtractor implements ResultSetExtractor<Map<Integer, List<String>>>
{
@Override
public Map<Integer, List<String>> extractData(ResultSet rs)
throws SQLException, DataAccessException
{
Map<Integer, List<String>> resultMap = new HashMap<Integer, List<String>>();
while (rs.next())
{
int id = rs.getInt("id");
List<String> nameList = resultMap.get(id);
if (nameList == null)
{
nameList = new ArrayList<String>();
resultMap.put(id, nameList);
}
nameList.add(rs.getString("name"));
}
return resultMap;
}
}