JDBCTemplate queryForMap для извлечения нескольких строк

Могу ли я использовать queryForMap, если есть несколько строк, возвращаемых запросом.

Для одной строки код ниже работает нормально.

public Map<String, Object> retrieveMultipleRowsColumns(String deptName){
    return jdbcTemplate.queryForMap("SELECT DEPT_ID,DEPT_NAME FROM DEPT WHERE DEPT_NAME = ?", deptName);
}

Как изменить это для нескольких строк?

Ответ 2

Я знаю, что это действительно старо, но есть гораздо более простой способ сделать это, если вы ищете карту.

Просто реализуйте интерфейс ResultSetExtractor, чтобы определить, какой тип вы хотите вернуть. Ниже приведен пример использования этого. Вы будете сопоставлять его вручную, но для простой карты это должно быть просто.

jdbcTemplate.query("select string1,string2 from table where x=1", new ResultSetExtractor<Map>(){
    @Override
    public Map extractData(ResultSet rs) throws SQLException,DataAccessException {
        HashMap<String,String> mapRet= new HashMap<String,String>();
        while(rs.next()){
            mapRet.put(rs.getString("string1"),rs.getString("string2"));
        }
        return mapRet;
    }
});

Это даст вам тип возврата Карты, который имеет несколько строк (сколько бы ваш запрос не возвращался), а не список Карт. Вы можете просмотреть документы ResultSetExtractor здесь: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/ResultSetExtractor.html

Ответ 3

public <T> List<T> queryForList(String sql,
                            Class<T> elementType,
                            Object... args)
                 throws DataAccessException

Описание, скопированное из интерфейса: JdbcOperations Запрос SQL, чтобы создать подготовленный оператор SQL и список аргументов для привязки к запросу, ожидая списка результатов.  Результаты будут отображены в список (одна запись для каждой строки) объектов результатов, каждая из которых соответствует указанному типу элемента.

Определяется: queryForList в интерфейсе JdbcOperations, Parameters:sql - запрос SQL для выполнения elementType - требуемый тип элемента в списке результатов (например, Integer.class) args - аргументы для привязки к запросу (оставляя его в PreparedStatement для угадывания соответствующего типа SQL); могут также contain SqlParameterValue объекты, которые указывают не только значение аргумента, но также тип SQL и, при желании, значение "Возвраты": список объектов, которые соответствуют указанному типу элемента. "Броски: DataAccessException" - если запрос не работает. Также: JdbcOperations.queryForList(String, Класс), SingleColumnRowMapper