2017-01-29 4 views
3

У меня был рабочий код RowMapper, который сопоставляет строку таблицы базы данных с объектом java. Я хотел изменить реализацию с использованием выражения лямбда. Тем не менее, я всегда получаю ошибку; Фрагмент кода следующим образом;Как реализовать RowMapper с помощью выражения java lambda

String queryString = "select * from person where person_id = ? "; 
RowMapper rowMapper = (rs, rowNum) -> { 

Person p = new Person(); 

p.setName(rs.getString("personName")); 
p.setAddress(rs.getString("address")); 
p.setAge(rs.getInt("age")); 
} 

Person person = getJdbcTemplate().query(queryString, personId, rowMapper); 

return person; 

Может ли кто-нибудь помочь мне правильно реализовать код? Любая идея получить список людей?

+0

Что такое ошибка компиляции. Вы пропустили точку с запятой после '}' ?. Является ли 'RowMapper' функциональным интерфейсом? Какую версию весны вы используете? – CKing

+0

Да, когда я добавляю компилятор с запятой, просил добавить оператор возврата внутри лямбды. Однако мне нужно вернуть объект человека. – nwGCham

ответ

6

RowMapper - это интерфейс с одним абстрактным методом (не наследующим от метода Object), поэтому it can be considered a functional interface. Его функциональный метод принимает ResultSet и int и возвращает объект.

Первой проблемой с кодом является то, что тип возвращаемого объекта является общим типом интерфейса. Как в настоящее время используется с RowMapper, вы используете raw-type, which you shouldn't do. Вторая проблема заключается в том, что выражение лямбда не возвращает какой-либо объект, поэтому он не может соответствовать функциональному методу, за исключением возвращаемого объекта.

Таким образом, исправленный код будет:

RowMapper<Person> rowMapper = (rs, rowNum) -> { 
    Person p = new Person(); 
    p.setName(rs.getString("personName")); 
    p.setAddress(rs.getString("address")); 
    p.setAge(rs.getInt("age")); 
    return p; 
}; 
+0

У меня возникла ошибка при компиляции кода. 311: error: ')' Ожидается RowMapper rowMapper = (rs, rowNum) -> { @Tunaki любая идея с этим ... ?? – nwGCham

+0

Возможно, из-за кода вокруг этого @ Гайата. Посмотрите на строки раньше. Если вы берете фрагмент в этом ответе в одиночку, он компилируется в порядке. – Tunaki

6

RowMapper используя пример лямбда-выражения:

return jdbcTemplate.query(" select Scale_Point,Scale_Head from TEval_Scale ", new Object[] {}, 
       (resultSet, rowNum) ->{ 

        TEvalScale tEvalScale = new TEvalScale(); 
        tEvalScale.setScalePoint(resultSet.getInt("Scale_Point")); 
        tEvalScale.setScaleHead(resultSet.getString("Scale_Head")); 
        return tEvalScale; 

       }); 

 Смежные вопросы

  • Нет связанных вопросов^_^